php-mysql數(shù)據(jù)庫(kù)操作類

<?php
/*
設(shè)計(jì)一個(gè)類霎箍,該類能夠在一實(shí)例化奇钞,就連接上了mysql數(shù)據(jù)庫(kù)澡为!
當(dāng)然,實(shí)例化的時(shí)候景埃,需要傳遞連接數(shù)據(jù)庫(kù)的基本信息:
服務(wù)器地址媒至,端口,用戶名谷徙,密碼拒啰,連接編碼,要使用的數(shù)據(jù)庫(kù)名完慧;
擴(kuò)充需求:
該實(shí)例化后的對(duì)象谋旦,還可以:
1,單獨(dú)去設(shè)定要使用的編碼,
2册着,以及單獨(dú)選擇要使用的數(shù)據(jù)庫(kù)拴孤!

繼續(xù)擴(kuò)充需求:
6,有一個(gè)方法甲捏,可以執(zhí)行“增刪改”語(yǔ)句演熟,并返回受影響的行數(shù)

7,有一個(gè)方法司顿,可以執(zhí)行“返回一行數(shù)據(jù)”的select語(yǔ)句芒粹,并得到一個(gè)一維數(shù)組;
比如:select * from XXX where id = 5;

8大溜,有一個(gè)方法化漆,可以執(zhí)行“返回多行數(shù)據(jù)”的select語(yǔ)句,并得到一個(gè)二維數(shù)組钦奋;
比如:select * from XXX where id > 5 and id < 10;

9获三,有一個(gè)方法,可以執(zhí)行“返回一個(gè)數(shù)據(jù)”的select語(yǔ)句锨苏,并得到一個(gè)“標(biāo)量值”疙教;
比如: select count(*) as c from XXX ;

*/

class MySQLDB{
//用于保存連接成功之后的資源
private $link = null;

private $host ; //定義一些屬性,以保存連接信息
private $port ;
private $user ;
private $pass ;
private $charset ;
private $dbname ;

//第1步:私有化構(gòu)造方法:
private function __construct($conf){
    //將傳遞過(guò)來(lái)的倆接信息保存到相應(yīng)屬性中伞租,并考慮默認(rèn)值情況
    $this->host = !empty($conf['host']) ? $conf['host'] : "localhost";
    $this->port = !empty($conf['port']) ? $conf['port'] : 3306;
    $this->user = !empty($conf['user']) ? $conf['user'] : "root";
    $this->pass = !empty($conf['pass']) ? $conf['pass'] : "123";
    $this->charset = !empty($conf['charset']) ? $conf['charset'] : "utf8";
    $this->dbname = !empty($conf['dbname']) ? $conf['dbname'] : "php40";

    //建立連接
    $this->connect();

}
//第2步:定義一個(gè)私有的靜態(tài)屬性:
private  static $instance = null;
//第3步:定義一個(gè)公開(kāi)的靜態(tài)方法以根據(jù)一定的邏輯返回該對(duì)象:
static public  function GetDB( $conf ){
        //if(  empty( static::$instance)  ){//改進(jìn)為如下判斷邏輯
        if( (static::$instance instanceOf static)  === false){
            static::$instance  =  new  static( $conf );
        }
        return  static::$instance;
}
//第4步:私有化克隆的魔術(shù)方法贞谓,以禁止外界克隆:
private function __clone(){}


function setCharset($char){
    //mysql_query("set names $char", $this->link);
    //以下一行代替上一行
    $this->query("set names $char");
}
function use_db( $db ){
    //mysql_query("use $db", $this->link);
    //以下一行代替上一行
    $this->query("use $db");
}
function close_db(){

    mysql_close($this->link);
}

//此方法用于執(zhí)行“增刪改”語(yǔ)句:
function exec( $sql ){
    $result = $this->query( $sql );
    
    return $this->affectedRow();    //返回影響的行數(shù)
    
}
//此方法用于執(zhí)行“返回一行數(shù)據(jù)” 的select語(yǔ)句并返回一個(gè)一維數(shù)組:
function  GetOneRow( $sql ){
    $result = $this->query( $sql );

    //下面自然是成功的時(shí)候葵诈,處理數(shù)據(jù):
    $rec = mysql_fetch_assoc( $result );//這就是一個(gè)一維數(shù)組裸弦!
    //類似這樣:array('id'=>5, 'name'=>'張三', 'age'=>18);
    return $rec;

}

//此方法用于執(zhí)行“返回多行數(shù)據(jù)” 的select語(yǔ)句并返回一個(gè)二維數(shù)組:
function  GetAllRow( $sql ){
    $result = $this->query( $sql );
    $rows = array();
    while($rec = mysql_fetch_assoc( $result ) ){
        $rows[] = $rec; //這樣之后,$rows就是二維數(shù)組了
    }
    return $rows;
}
//此方法用于執(zhí)行“返回一個(gè)數(shù)據(jù)” 的select語(yǔ)句并返回一個(gè)標(biāo)量數(shù)據(jù)值:
function  GetOneData( $sql ){
    $result = $this->query( $sql );//仍然是一個(gè)結(jié)果集(資源)
    $rec = mysql_fetch_row( $result );  //取出第一行作喘,并做成索引數(shù)組
    $data = $rec[0];
    return $data;
}

private function query( $sql ){
    $result = mysql_query($sql, $this->link);
    if($result === false){
        echo "<p>數(shù)據(jù)庫(kù)執(zhí)行失斃砀怼:";
        echo "<br />失敗語(yǔ)句:" . $sql;
        echo "<br />錯(cuò)誤代號(hào):" . mysql_errno();
        echo "<br />錯(cuò)誤提示:" . mysql_error();
        echo "</p>";
        die();  //執(zhí)行失敗,直接終止泞坦!
    }
    return $result;
}
//序列化的時(shí)候窖贤,我們只要對(duì)6個(gè)數(shù)據(jù)進(jìn)行序列化
function __sleep(){
    
    return array("host","port","user","pass","charset","dbname");
}

//反序列化的時(shí)候,我們需要來(lái)使用數(shù)據(jù)將數(shù)據(jù)庫(kù)連接成功
function __wakeup(){
    //建立連接
    $this->connect();
}

//完成對(duì)象實(shí)例化的時(shí)候所必須的數(shù)據(jù)庫(kù)連接基本操作
private function connect(){
    $this->link = mysql_connect(
                    "{$this->host}:{$this->port}", 
                    "{$this->user}", 
                    $this->pass
                )
                or  die("連接數(shù)據(jù)庫(kù)失敺∷赃梧!");
    $this->setCharset( $this->charset );
    $this->use_db( $this->dbname );
}
//返回受影響的行數(shù)
function affectedRow(){
    return mysql_affected_rows($this->link);
}

//獲得最后一次insert時(shí)的自增長(zhǎng)id值
function getInsertedId(){
    return mysql_insert_id($this->link);
}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市豌熄,隨后出現(xiàn)的幾起案子授嘀,更是在濱河造成了極大的恐慌,老刑警劉巖锣险,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹄皱,死亡現(xiàn)場(chǎng)離奇詭異览闰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)巷折,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門焕济,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盔几,你說(shuō)我怎么就攤上這事晴弃。” “怎么了逊拍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵上鞠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我芯丧,道長(zhǎng)芍阎,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任缨恒,我火速辦了婚禮谴咸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骗露。我一直安慰自己岭佳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布萧锉。 她就那樣靜靜地躺著珊随,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柿隙。 梳的紋絲不亂的頭發(fā)上叶洞,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音禀崖,去河邊找鬼衩辟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛波附,可吹牛的內(nèi)容都是我干的艺晴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叶雹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼财饥!你這毒婦竟也來(lái)了换吧?” 一聲冷哼從身側(cè)響起折晦,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沾瓦,沒(méi)想到半個(gè)月后满着,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谦炒,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年风喇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宁改。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魂莫,死狀恐怖还蹲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耙考,我是刑警寧澤谜喊,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站倦始,受9級(jí)特大地震影響斗遏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鞋邑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一诵次、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枚碗,春花似錦逾一、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至酷含,卻和暖如春鄙早,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椅亚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工限番, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呀舔。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓弥虐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親媚赖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霜瘪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法惧磺,內(nèi)部類的語(yǔ)法颖对,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法磨隘,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,791評(píng)論 0 11
  • 什么是SQL數(shù)據(jù)庫(kù): SQL是Structured Query Language(結(jié)構(gòu)化查詢語(yǔ)言)的縮寫缤底。SQL是...
    西貝巴巴閱讀 1,801評(píng)論 0 10
  • 假期我去大舅爺家的農(nóng)場(chǎng)玩兒顾患,農(nóng)場(chǎng)在薊縣,農(nóng)場(chǎng)很大个唧,空氣很新鮮江解。 農(nóng)場(chǎng)里種了很多蔬菜 ,有西蘭...
    超帥的張軒睿閱讀 313評(píng)論 0 0
  • 失眠已經(jīng)成為了我一直以來(lái)的痛病徙歼,讓人不能安眠犁河,每當(dāng)夜幕降臨,是想早早入睡的魄梯,卻也不得心意呼股,各種煩心瑣事在這個(gè)...
    舊事酒濃意味深長(zhǎng)閱讀 401評(píng)論 0 1