php經過Mysqli和PDO鏈接mysql數據詳解

前言

在實際開發中,關於數據庫操做類,不多是本身去寫,大可能是經過一些框架去實現,忽然本身去寫,仍是須要借閱手冊之類,因而我以爲有必要去總結一下,php鏈接mysql的方法,php鏈接mysql,能夠經過mysql擴展、mysqli擴展,pdo擴展,由於高版本的php將移除mysql_系列方法,故在此只總結另外兩種鏈接方式。首先咱們得確保php的這兩個擴展是否已經打開,查看php.ini配置文件以下:javascript

提示,若有有的人說,我打開了擴展庫(即去掉了,前面的';'),仍然一直提示mysqli_或pdo系列方法找不到,這極可能是由於你沒有指定擴展庫所在目錄。找到extension_dir 參數,指定擴展所在目錄便可php

extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"java

配置文件

首先咱們將鏈接數據庫須要的配置文件,單獨出來,這樣就不須要每次都去寫,須要的時候,直接include或者require包含進來就能夠了。若是關於include與require不清楚的,能夠查考http://blog.csdn.net/hsd2012/article/details/51089785mysql

文件名conf.phpsql

 
  1. return array(  
  2.         'host'=>'127.0.0.1',  
  3.         'user'=>'root',  
  4.         'password'=>'',//由於測試,我就不設置密碼,實際開發中,必須創建新的用戶並設置密碼  
  5.         'dbName'=>'xxpt',  
  6.         'charSet'=>'utf8',  
  7.             'port'=>'3306'  
 
);

 

 
 

 

經過mysqli擴展鏈接

mysqli有兩種方式去鏈接mysql,且支持預處理,一種是面向對象,一種是面向過程。數據庫

1.面向過程鏈接mysql

 
  1. $dbConf=include 'conf.php';  
  2. function openDb($dbConf){  
  3.     $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打開失敗');  
  4.     //固然如上面不填寫數據庫也可經過mysqli_select($conn,$dbConf['dbName'])來選擇數據庫  
  5.     mysqli_set_charset($conn,$dbConf['charSet']);//設置編碼  
  6.     return $conn;  
  7. }  
  8. function closeDb($conn){  
  9.     mysqli_close($conn);  
  10. }  
  11.   
  12. //1.打開鏈接  
  13. $conn=openDb($dbConf);  
  14. //2query方法執行增、查、刪、改  
  15. $sql='SELECT t.`id1` from `t1` as t';  
  16. /*************數據查詢***************************/  
  17. $rs=$conn->query($sql);  
  18. //從結果集中讀取數據  
  19. //fetch_assoc:返回鍵值對形式,鍵位字段名、fetch_row:返回鍵值對形式,鍵值爲數值、fetch_array:返回1和2兩種形式的組合  
  20. $data=array();//保存數據  
  21. while($tmp=mysqli_fetch_assoc($rs)){//每次從結果集中取出一行數據  
  22.     $data[]=$tmp;  
  23. }  
  24. //對數據進行相應的操做  
  25. print_r($data);//輸出數據  
  26.   
  27. /*************數據插入***************************/  
  28. $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';  
  29. $rs=$conn->query($sql);  
  30. //3.關閉鏈接  
  31. closeDb($conn);  

 

2.面向對象方式鏈接mysql

 
  1. $dbConf=include 'conf.php';  
  2. //打開  
  3. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);  
  4. if(!$conn){  
  5.     die('數據庫打開失敗');  
  6. }  
  7. //執行增刪改查  
  8. /*************數據查詢***************************/  
  9. $sql='SELECT t.`id1` from `t1` as t';  
  10. $rs=$conn->query($sql);//獲取結果集  
  11. //經過fetch_assoc、fetch_array、fetch_row從結果集中獲取數據  
  12. while ($tmp=$rs->fetch_assoc()) {  
  13.     print_r($tmp);  
  14. }  
  15. /*************數據刪除***************************/  
  16. $sql='DELETE FROM `t1` WHERE `id1`=3';  
  17. $rs=$conn->query($sql);//獲取結果集  
  18. print_r($rs);$conn->close();  

3.mysqli預處理

主要講解mysli對象編程的預處理,至於面向過程變成的預處理使用mysqli_prepare就不在介紹
$dbConf=include 'conf.php';  
  1. //打開  
  2. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);  
  3. if(!$conn){  
  4.     die('數據庫打開失敗');  
  5. }  
  6. //執行增刪改查  
  7. /*************數據查詢***************************/  
  8. $sql='SELECT * from `t1` as t WHERE id2>?';  
  9. $stmt=$conn->prepare($sql);  
  10. if(!$stmt){  
  11.     die('sql語句有問題');  
  12. }  
  13. //綁定參數  
  14. $id2=2;  
  15. $stmt->bind_param('i',$id2);//不能寫成bind_param('i',2)  
  16. //執行  
  17. $stmt->execute();  
  18. //將結果綁定發到指定的參數上  
  19. $stmt->bind_result($id1, $id2);  
  20. //獲取結果  
  21. while ($tmp=$stmt->fetch()) {  
  22.     print_r('id1='.$id1.',id2='.$id2);  
  23.     echo '</br>';  
  24. }  
  25. //關閉  
  26. $stmt->free_result();//釋放結果    
  27. $stmt->close();//關閉預編譯的指令.    
  28. $conn->close();//關閉鏈接    

預處理綁定參數中參數類型說明以下

php使用PDO方式鏈接mysql

 
  1. $dbConf=include 'conf.php';  
  2. //打開  
  3. $pdo=myPDO::getInstance($dbConf);  
  4. /*************數據查詢***************************/  
  5. $sql='SELECT t.`id1` from `t1` as t';  
  6. $rs=$pdo->query($sql);  
  7. $data=$rs->fetchAll();//取出全部結果  
  8. print_r($data);  
  9. /*************數據更新***************************/  
  10. $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';  
  11. $rs=$pdo->query($sql);  
  12.   
  13. /** 
  14.  * 數據庫pdo鏈接 
  15.  */  
  16. class myPDO{      
  17.     private static $pdo;  
  18.       
  19.     private function __construct(){  
  20.         //code  
  21.     }  
  22.     private function __clone(){  
  23.         //code  
  24.     }  
  25.     /** 
  26.      * 獲取實例化的PDO,單例模式 
  27.      * @return PDO 
  28.      */  
  29.     public static function getInstance($dbConf){  
  30.         if(!(self::$pdo instanceof PDO)){  
  31.             $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];  
  32.             try {  
  33.                 self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持長鏈接  
  34.                 self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
  35.             } catch (PDOException $e) {  
  36.                 print "Error:".$e->getMessage()."<br/>";  
  37.                 die();  
  38.             }  
  39.         }  
  40.         return self::$pdo;  
  41.     }  
  42. }  
pdo支持預處理,推薦使用預處理方式,以防sql注入。
相關文章
相關標籤/搜索