PDO:
PHP Data Object:php的數據對象。
pdo是數據庫操作工具類!
1,它能操作很多種數據庫,比如mysql,oracle,sybase。。。。
2,它具有操作數據庫的更多的功能,比如事務。
3,它能操作各種數據,卻有一致語法:即使用pdo,無需考慮不同數據庫的sql語句的不同細節寫法。
4,帶錯誤處理!
pdo其實一個“類”,我們用的時候,就是new一個pdo對象出來。
在php代碼中,操作mysql數據庫的基本需求和結果:
1,連接數據庫,得到“連接資源”;
2,執行各種sql語句,得到布爾值,或“結果集”;
3,對結果集數據,進行“取用”(通常就是遍歷,fetch....)
pdo系統的邏輯結構:
php腳本->PDO數據對象->PDO MySQL引擎 ->MySQL數據庫
->PDO Oracle引擎->Oracle數據庫
->PDO 其他引擎 ->其他數據庫
要想使用(操作)不同的數據庫,就需要去php.ini中,打開相應的pdo模塊(組件),比如:
並重啟apache。
使用PDO
1,連接數據庫:
$DSN = "mysql:host=服務器地址/名稱;port=端口號;dbname=數據庫名";
$Options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names utf8’);
$pdo = new pdo($DSN, "用戶名", "密碼", $Options);
DSN: Data Source Name ,數據源名稱,
2,執行sql語句:
$result1 = $pdo->exec( “增刪改語句” ); //
//返回:
數字:表示該語句影響的行數。
false:表示執行失敗。
$result2 = $pdo->query( “各種sql語句” );//習慣上query()方法用於執行select這種有數據返回的語句
$result2 結果有:
執行失敗: false:
執行成功: 返回結果集——pdo結果集,通常稱為pdostatement。
此結果集還需要進一步處理,就像mysql_query()返回結果一樣!
3,斷開連接——如果需要。
$pdo = null; //就是銷毀對象而已。
PDO對象的其他常見操作(方法):
$pdo->lastInsertId(); 獲得最后一次自增長的id值
$pdo->beginTransaction(); 開始一個事務
$pdo->commit() 提交一個事務
$pdo->rollBack(); 回滾一個事務
$pdo->setAttribute(屬性名,屬性值);
在php代碼中,要想使用事務,可以這樣:
$pdo->beginTransaction();
$pdo->exec( sql語句1);
$pdo->exec( sql語句2);
。。。。
if(如果沒有錯誤){
$pdo->commit();
}
else{
$pdo->rollback();
}
PDO的錯誤處理
pdo發生的錯誤,有兩種處理模式:
靜默模式:
就是發生錯誤后,並不產生錯誤提示或輸出,而是需要去“人為”通過代碼去獲取,並判斷。
比如:
$pdo -> exec( $sql ); //這條語句,可能出錯,也可能不出錯!可以做后續判斷:
$Code = $pdo->errorCode(); //獲取前一次執行sql語句的“錯誤代號”,如果沒有錯誤,就是0
if($Code == 0){
echo “執行成功”;
} else {
$info = $pdo->errorInfo(); //獲取錯誤信息,但這里結果是一個數組,其中下標為2的就是錯誤提示內容
echo “失敗,請參考錯誤提示:” . $info[2];
}
異常模式:
是一種特別的語法形式,類似如下:
try{
//這里可以用pdo執行sql語句
//這個范圍的語句,一旦出錯,就會立即進入catach范圍!
$pdo -> exec (“update user_list set user_pass=’456’ where id=16”);
}
catch(Exception $e){
//如果try范圍的語句發生錯誤,就會執行這個catch范圍的語句,否則就不會執行
//其中,$e是一個記錄的錯誤信息的“對象”,跟$pdo->errorinfo()類似!處理如下:
echo “失敗,請參考錯誤提示:” . $e->GetMessage();
}
后續代碼。。。。
PDO的結果集對象
當使用pdo對象的query()方法,執行一條有返回數據的語句(比如select語句,desc語句,show語句),如果執行成功,返回的就是“pdo結果集對象”。
基本上,可以理解為:該對象中,“存放”了很多數據,我們需要去“取出來”。
對比:
php的原始mysql函數:$result = mysql_qury( “select .....”);
pdo的處理方法: $result = $pdo->query( “select ......”);
他們本質上一樣!
pdo的結果集對象的常用方法:
$stmt = $pdo->query(“select ...... ”);//這是獲得結果集對象
$stmt->rowCount() ; //行數
$stmt->columnCount() ; //列數
$stmt->fetch( [返回類型] ); //取出一行數據!結果是一個一維數組
返回類型常用的有:
PDO::FETCH_ASSOC:返回關聯數組
PDO::FETCH_NUM:返回索引數組
PDO::FETCH_BOTH:返回前二者皆有的數組,這是默認值
PDO::FETCH_OBJ:返回對象
$stmt->fetchAll([返回類型]);//取出所有數據,結果是一個二維數組
$stmt->fetchColumn( [$i] );//可以取出指定的第i個列的數據(默認是0)
$stmt->errorCode(); //靜默模式下,獲得出錯代號
$stmt->errorInfo();//靜默模式下,獲得出錯信息,是一個數組
$stmt->closeCursor();關閉結果集,清理資源。