PDO--PHP Data Objects

weixin_34391854發表於2014-07-25

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=lamp36db","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("lamp1404","qq2"));
 	 $stmt->execute(array("id"=>"lamp1404","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語句處理時(增刪改),要求是都必須成功。


相關文章