PDO中包含三個預定一類:PDO、PODStatement和PDOException。
1.PDO類
PDO類代表一個PHP和資料庫之間的連線,PDO類所擁有的方法如下:
PDO:構造器,構建一個新的PDO物件。
beginTransaction:事務開始。
commit:提交事務
errorCode:從資料庫返回一個錯誤代號。
errorInfo:從資料庫返回一個含有錯誤資訊的資料。
exec:執行一條sql語句並還回影響的行數
getAttribute:返回一個資料庫連線屬性。
lastInsertId:返回最新插入到資料庫的行id
prepare:為執行準備一條sql語句,返回語句執行後的聯合結果集(PDOStatement)。
query:執行一條sql語句並返回結果集
quote:返回新增引號的字串,使其可以用於sql中
rollBack:事務回滾
setAttribute:設定一個資料庫連線屬性
2.PDOStatement類
PDOStatement類代表一條預處理語句以及語句執行後的聯合結果集合,擁有的方法:
bindColumn:繫結一個PHP變數到結果集中的輸出序列。
bindParam:繫結一個PHP變數到一個預處理語句中的引數
bindValue:繫結一個值到預處理語句中的引數
closeCursor:關閉遊標,是語句可以再次執行。
columnCount:返回結果集中的列的數量
errorCode:從語句中返回一個錯誤的代號
errorInfo:從語句中返回一個包含錯誤資訊的陣列
execute:執行一條預處理語句
fetch:從結果集中去除一行
fetchAll:從結果集中取出一個包含所有行的陣列
fetchColumn:返回結果集中某一列中的資料。
getAttribute:返回一個PDOStatement屬性
getColumnMeta:返回結果集中某一列的結構。
nextRowset:返回下一個結果集
rowCount:返回sql語句執行後影響的行數
setAttribute:設定一個PDOStatement屬性
setFetchModel:為PDOStatement設定獲取資料的方式。
3.PDOException
PDOException是對exception的簡單從寫。
使用PDO 案例1:
<?php try{ $dsn='mysql:host=localhost;dbname=shen';//設定PDO的資料來源 $db=new PDO($dsn,'root','rootroot');//構造方法 //設定異常 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $db->exec("set names utf8"); $sql = "insert into a2(name) values('asdf')"; $db->exec($sql);//執行語句 //使用預處理 $insert = $db->prepare('insert into a2(name) values(?)'); $insert->execute(array('王')); $insert->execute(array('lisi'));
//查詢結果 $sql='select name from a2'; $query = $db->prepare($sql); $query->execute(); var_dump($query->fetchAll(PDO::FETCH_ASSOC)); }catch(PDOException $err){ echo $err->getMessage(); } ?>
案例2:繫結引數和預編譯
<?php try{ $dsn='mysql:host=localhost;dbname=shen';//設定PDO的資料來源 $dbh=new PDO($dsn,'root','rootroot');//構造方法
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$name = '王'; $sth = $dbh->prepare('select name from a2 where name = :name'); $sth->bindparam(':name',$name); $sth->execute(); var_dump($sth->fetchAll(PDO::FETCH_ASSOC)); $sth = $dbh->prepare('select * from a2 where name = ?'); $sth->bindparam(1,$name,PDO::PARAM_STR); $sth->execute(); var_dump($sth->fetchAll(PDO::FETCH_ASSOC)); }catch(PDOException $err){ echo $err->getMessage(); } ?>
在mysql的應用中,為了防止注入共計,通常使用intval,addslashes等函式對值進行轉義,轉變成sql中合法的型別,這種方法比較複雜,而使用PDO的bindParam方法就變得比較簡單,只需要在函式中指定第三個引數,就可以把值轉換為需要的型別並拼接到原先的語句中。
案例3:事務處理
事務一般分為三步
1.開始事務
2.執行事務中需要執行的sql語句
3.提交事務 完成事務。
<?php try{ $dsn='mysql:host=localhost;dbname=shen';//設定PDO的資料來源 $db=new PDO($dsn,'root','rootroot');//構造方法 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $db->beginTransaction();//開始事務 //開始執行sql語句 $db->commit();//提交事務 結束 }catch(PDOException $err){ echo $err->getMessage(); } ?>