PHP的PDO

奮程式序猿發表於2016-12-09

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();
}
?>

 

相關文章