前言
在實際開發(fā)中,關(guān)于數(shù)據(jù)庫操作類,很少是自己去寫,大多是通過一些框架去實現(xiàn),突然自己去寫,還是需要借閱手冊之類,于是我覺得有必要去總結(jié)一下,php連接mysql的方法,php連接mysql,可以通過mysql擴展、mysqli擴展,pdo擴展,因為高版本的php將移除mysql_系列方法,故在此只總結(jié)另外兩種連接方式。首先我們得確保php的這兩個擴展是否已經(jīng)打開,查看php.ini配置文件如下:
提示,如有有的人說,我打開了擴展庫(即去掉了,前面的’;’),仍然一直提示mysqli_或pdo系列方法找不到,這很可能是因為你沒有指定擴展庫所在目錄。找到extension_dir 參數(shù),指定擴展所在目錄即可
extension_dir?=?"D:/wamp/bin/php/php5.5.12/ext/"
配置文件
首先我們將連接數(shù)據(jù)庫需要的配置文件,單獨出來,這樣就不需要每次都去寫,需要的時候,直接include或者require包含進來就可以了。如果關(guān)于include與require不清楚的,可以查考http://www.php.cn/
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
文件名conf.php
return?array( 'host'=>'127.0.0.1', 'user'=>'root', 'password'=>'',//因為測試,我就不設(shè)置密碼,實際開發(fā)中,必須建立新的用戶并設(shè)置密碼 'dbName'=>'xxpt', 'charSet'=>'utf8', ???????? 'port'=>'3306' ???????? );
通過mysqli擴展連接
mysqli有兩種方式去連接mysql,且支持預(yù)處理,一種是面向?qū)ο?/b>,一種是面向過程。
1.面向過程連接mysql
$dbConf=include?'conf.php'; function?openDb($dbConf){ $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port'])?or?die('打開失敗'); //當(dāng)然如上面不填寫數(shù)據(jù)庫也可通過mysqli_select($conn,$dbConf['dbName'])來選擇數(shù)據(jù)庫 mysqli_set_charset($conn,$dbConf['charSet']);//設(shè)置編碼 return?$conn; } function?closeDb($conn){ mysqli_close($conn); } //1.打開連接 $conn=openDb($dbConf); //2query方法執(zhí)行增、查、刪、改 $sql='SELECT?t.`id1`?from?`t1`?as?t'; /*************數(shù)據(jù)查詢***************************/ $rs=$conn->query($sql); //從結(jié)果集中讀取數(shù)據(jù) //fetch_assoc:返回鍵值對形式,鍵位字段名、fetch_row:返回鍵值對形式,鍵值為數(shù)值、fetch_array:返回1和2兩種形式的組合 $data=array();//保存數(shù)據(jù) while($tmp=mysqli_fetch_assoc($rs)){//每次從結(jié)果集中取出一行數(shù)據(jù) $data[]=$tmp; } //對數(shù)據(jù)進行相應(yīng)的操作 print_r($data);//輸出數(shù)據(jù) /*************數(shù)據(jù)插入***************************/ $sql='INSERT?INTO?`t1`(`id1`,`id2`)?VALUES(3,4);'; $rs=$conn->query($sql); //3.關(guān)閉連接 closeDb($conn);
2.面向?qū)ο蠓绞竭B接mysql
$dbConf=include?'conf.php'; //打開 $conn=new?mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']); if(!$conn){ die('數(shù)據(jù)庫打開失敗'); } //執(zhí)行增刪改查 /*************數(shù)據(jù)查詢***************************/ $sql='SELECT?t.`id1`?from?`t1`?as?t'; $rs=$conn->query($sql);//獲取結(jié)果集 //通過fetch_assoc、fetch_array、fetch_row從結(jié)果集中獲取數(shù)據(jù) while?($tmp=$rs->fetch_assoc())?{ print_r($tmp); } /*************數(shù)據(jù)刪除***************************/ $sql='DELETE?FROM?`t1`?WHERE?`id1`=3'; $rs=$conn->query($sql);//獲取結(jié)果集 print_r($rs);$conn->close();
3.mysqli預(yù)處理
主要講解mysli對象編程的預(yù)處理,至于面向過程變成的預(yù)處理使用mysqli_prepare就不在介紹
$dbConf=include?'conf.php'; //打開 $conn=new?mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']); if(!$conn){ die('數(shù)據(jù)庫打開失敗'); } //執(zhí)行增刪改查 /*************數(shù)據(jù)查詢***************************/ $sql='SELECT?*?from?`t1`?as?t?WHERE?id2>?'; $stmt=$conn->prepare($sql); if(!$stmt){ die('sql語句有問題'); } //綁定參數(shù) $id2=2; $stmt->bind_param('i',$id2);//不能寫成bind_param('i',2) //執(zhí)行 $stmt->execute(); //將結(jié)果綁定發(fā)到指定的參數(shù)上 $stmt->bind_result($id1,?$id2); //獲取結(jié)果 while?($tmp=$stmt->fetch())?{ print_r('id1='.$id1.',id2='.$id2); echo?''; } //關(guān)閉 $stmt->free_result();//釋放結(jié)果?? $stmt->close();//關(guān)閉預(yù)編譯的指令.?? $conn->close();//關(guān)閉連接
預(yù)處理綁定參數(shù)中參數(shù)類型說明如下
php使用PDO方式連接mysql
$dbConf=include?'conf.php'; //打開 $pdo=myPDO::getInstance($dbConf); /*************數(shù)據(jù)查詢***************************/ $sql='SELECT?t.`id1`?from?`t1`?as?t'; $rs=$pdo->query($sql); $data=$rs->fetchAll();//取出所有結(jié)果 print_r($data); /*************數(shù)據(jù)更新***************************/ $sql='UPDATE?t1?SET?t1.`id1`=11?WHERE?t1.`id1`=1'; $rs=$pdo->query($sql); /** ?*?數(shù)據(jù)庫pdo連接 ?*/ class?myPDO{ private?static?$pdo; private?function?__construct(){ //code } private?function?__clone(){ //code } /** ?*?獲取實例化的PDO,單例模式 ?*?@return?PDO ?*/ public?static?function?getInstance($dbConf){ if(!(self::$pdo?instanceof?PDO)){ $dsn?="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName']."; charset=".$dbConf['charSet']; try?{ self::$pdo?=?new?PDO($dsn,$dbConf['user'],?$dbConf['password'],? array(PDO::ATTR_PERSISTENT?=>?true,PDO::MYSQL_ATTR_INIT_COMMAND?=>?"SET?NAMES?utf8"));?//保持長連接 self::$pdo->setAttribute(PDO::ATTR_ERRMODE,?PDO::ERRMODE_WARNING); }?catch?(PDOException?$e)?{ print?"Error:".$e->getMessage()."<br>"; die(); } } return?self::$pdo; } }
pdo支持預(yù)處理,推薦使用預(yù)處理方式,以防sql注入。
?以上就是php通過Mysqli和PDO連接mysql數(shù)據(jù)詳解的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.php.cn)!