PHP的PDO

PHP操作MySQL數據庫方式有三種:
*1. mysql 最原始的、純過程化的 如連接: mysql_connect(主機名,賬號,密碼);
  mysql_query();
       
2. mysqli 改進版的、兼容過程化和麪向對象化操作
如:連接: mysqli_connect(主機名,賬號,密碼,庫名) //過程化
  new mysqli(主機名,賬號,密碼,庫名) //面向對象
  
*3. PDO 通用的,兼容其他數據庫 , 純面向對象方式
如: 連接: new PDO(DSN,賬號,密碼);

選擇PDO的原因:跨數據庫,帶預處理(防sql注入)、支持事務操作
        
        
=============================================================================
PDO--PHP Data Objects
=============================================================================


PDO的環境配置:開啓支持PDO
在php.ini配置文件中開啓:
extension=php_pdo.dll
extension=php_pdo_mysql.dll

在PDO操作中涉及到類:PDO、PDOStatement(預處理對象)、PDOException(異常類)


一、 PDO類的構造方法:
---------------------------------------------------------
  PDO __construct( string dsn 
[, string username 
[, string password 
[, array driver_options]]] );

 其中:dsn數據庫連接信息如“mysql:host=localhost;dbname=庫名”
 dsn的格式:”驅動名:host=主機名;dbname=庫名“
      username:用戶名
      password:密碼
      driver_options:配置選項:
      如: PDO::ATTR_PERSISTENT=>true,是否開啓持久鏈接
  *PDO::ATTR_ERRMODE=>錯誤處理模式:(可以是以下三個)(3)
PDO::ERRMODE_SILENT:不報錯誤(忽略)(0)
PDO::ERRMODE_WARNING:以警告的方式報錯(1)
*PDO::ERRMODE_EXCEPTION:以異常的方式報錯(推薦使用)。(2)


$pdo =  new PDO("mysql:host=localhost;dbname=lamp04","root","root");
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
其他方法:
--------------------------------------------------------
1. query($sql); 用於執行查詢SQL語句。返回PDOStatement對象
2. exec($sql);  用於執行增、刪、改操作,返回影響行數;
3. getAttribute(); 獲取一個"數據庫連接對象"屬性。
4. setAttribute(); 設置一個"數據庫連接對象"屬性。
5. beginTransaction 開啓一個事物(做一個回滾點)
6. commit 提交事務
7. rollBack 事務回滾操作。 
8. errorCode獲取錯誤碼   
9. errorInfo 獲取錯誤信息   
10.lastInsertId  獲取剛剛添加的主鍵值。
11.prepare 創建SQL的預處理,返回PDOStatement對象
12.quote 爲sql字串添加單引號。




預處理對象PDOStatement對象:
=============================================
我們可以通過PDO的方法來獲取PDOStatement:
 1.PDO的query(查詢sql)方法獲取,用於解析結果集
 2.PDO的prepare(SQL)方法獲取,用於處理參數式sql並執行操作。


PDOstatement對象的方法:
----------------------------------------------------------------
1、fetch() 返回結果集的下一行,結果指針下移,到頭返回false 。
  參數: PDO::FETCH_BOTH (default)、:索引加關聯數組模式
      PDO::FETCH_ASSOC、   :關聯數組模式
        PDO::FETCH_NUM、   :索引數組模式
PDO::FETCH_OBJ、           :對象模式
PDO::FETCH_LAZY   :所有模式(SQL語句和對象)

2、fetchAll() 通過一次調用返回所有結果,結果是以數組形式保存
      參數:PDO::FETCH_BOTH (default)、
PDO::FETCH_ASSOC、
PDO::FETCH_NUM、
PDO::FETCH_OBJ、
PDO::FETCH_COLUMN表示取指定某一列,
如:$rslist = $stmt->fetchAll(PDO::FETCH_COLUMN,2);取第三列
3、execute() 負責執行一個準備好了的預處理語句 
4. fetchColumn()返回結果集中下一行某個列的值
5. setFetchMode()設置需要結果集合的類型
6. rowCount()   返回使用增、刪、改、查操作語句後受影響的行總數
7. setAttribute()爲一個預處理語句設置屬性
8. getAttribute()獲取一個聲明的屬性
9. errorCode() 獲取錯誤碼
10. errorInfo() 獲取錯誤信息
11. bindParam() 將參數綁定到相應的查詢佔位符上
    bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type [, int $length [, mixed $driver_options ]]] ) 其中: $parameter:佔位符名或索引偏移量 &$variable:參數的值,需要按引用傳遞也就是必須放一個變量
    其中參數:$data_type:數據類型PDO::PARAM_BOOL/PDO::PARAM_NULL/PDO::PARAM_INT/PDO::PARAM_STR/
   PDO::PARAM_LOB/PDO::PARAM_STMT/PDO::PARAM_INPUT_OUTPUT
         $length:指數據類型的長度 $driver_options:驅動選項。
12. bindColumn() 用來匹配列名和一個指定的變量名,這樣每次獲取各行記錄時,會自動將相應的值賦給變量。
13. bindValue() 將一值綁定到對應的一個參數中
14. nextRowset() 檢查下一行集
15. columnCount() 在結果集中返回列的數目
16. getColumnMeta() 在結果集中返回某一列的屬性信息
17. closeCursor() 關閉遊標,使該聲明再次執行




在PDO中參數式的SQL語句有兩種(預處理sql):
   1.insert into stu(id,name) value(?,?); //?號式(適合參數少的)
   2.insert into stu(id,name) value(:id,:name); // 別名式(適合參數多的)
在PDO中爲參數式SQL語句賦值有三種:
   1.使用數組 
$stmt->execute(array("lamp04","qq2"));
  $stmt->execute(array("id"=>"lamp04","name"=>"qq2"));
   2.使用方法單個賦值
$stmt->bindValue(1,"lamp1901");
$stmt->bindValue(2,"qq2");
$stmt->execute();


$stmt->bindValue(":id","lamp1901",PDO::PARAM_STR); //帶指定類型
$stmt->bindValue(":name","qq2",PDO::PARAM_STR);
$stmt->execute();
 
   3. 使用方法綁定變量
$stmt->bindParam(":id",$id);
$stmt->bindParam(":name",$name);
$id="lamp1401";
$name="qq2";
     $stmt->execute();
 
事務處理
-----------------------------------------------
事務:將多條sql操作(增刪改)作爲一個操作單元,要麼都成功,要麼都失敗。-----

4.  PDO對事務的支持
第一:被操作的表必須是innoDB類型的表(支持事務)
MySQL常用的表類型:MyISAM(非事務)增刪改速度快、InnodB(事務型)安全性高
//更改表的類型爲innoDB類型
mysql> alter table stu engine=innodb;
Query OK, 29 rows affected (0.34 sec)
Records: 29  Duplicates: 0  Warnings: 0
//查看錶結構
mysql> show create table stu\G;   
  
第二:使用PDO就可以操作數據庫了
使用到了PDO中的方法:
beginTransaction 開啓一個事物(做一個回滾點)
commit 提交事務
rollBack 事務回滾操作。 

使用情況:當做多條sql語句處理時(增刪改),要求是都必須成功。   
發佈了17 篇原創文章 · 獲贊 23 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章