php通過Mysqli和PDO連接mysql數(shù)據(jù)詳解

前言

在實際開發(fā)中,關(guān)于數(shù)據(jù)庫操作類,很少是自己去寫,大多是通過一些框架去實現(xiàn),突然自己去寫,還是需要借閱手冊之類,于是我覺得有必要去總結(jié)一下,php連接mysql的方法,php連接mysql,可以通過mysql擴展、mysqli擴展,pdo擴展,因為高版本的php將移除mysql_系列方法,故在此只總結(jié)另外兩種連接方式。首先我們得確保php的這兩個擴展是否已經(jīng)打開,查看php.ini配置文件如下:

php通過Mysqli和PDO連接mysql數(shù)據(jù)詳解

提示,如有有的人說,我打開了擴展庫(即去掉了,前面的’;’),仍然一直提示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通過Mysqli和PDO連接mysql數(shù)據(jù)詳解

php使用PDO方式連接mysql

$dbConf=include?'conf.php';  //打開  $pdo=myPDO::getInstance($dbConf);  /*************數(shù)據(jù)查詢***************************/  $sql='SELECT?t.`id1`?from?`t1`?as?t';  $rs=$pdo-&gt;query($sql);  $data=$rs-&gt;fetchAll();//取出所有結(jié)果  print_r($data);  /*************數(shù)據(jù)更新***************************/  $sql='UPDATE?t1?SET?t1.`id1`=11?WHERE?t1.`id1`=1';  $rs=$pdo-&gt;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?=&gt;?true,PDO::MYSQL_ATTR_INIT_COMMAND?=&gt;?"SET?NAMES?utf8"));?//保持長連接  				self::$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE,?PDO::ERRMODE_WARNING);  			}?catch?(PDOException?$e)?{  				print?"Error:".$e-&gt;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)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享