PHP Data Objects

PDO（PHP Data Objects）是一種在PHP裡連接資料庫的使用介面。PDO與mysqli曾經被建議用來取代原本PHP在用的mysql相關函數，基於資料庫使用的安全性，因為後者欠缺對於SQL資料隱碼的防護。

 範例 
以下是一個簡單的 PDO 更新交易資料庫的程式碼，其中採用了預處理的方式將執行語句與參數隔離：
<?php
    $query = "UPDATE `payment` SET `status` = '2', `id` = ?, `method` = ? WHERE `payment_id` = ? and `status` = '1'";
    $stmt = $this -> pdo -> prepare($query);
    $stmt -> bindParam(1, $id);
    $stmt -> bindParam(2, $type);
    $stmt -> bindParam(3, $payment_id);
    $result = $stmt -> execute();
?>

PDO默认会把数据库中查询的数据全部缓存下来，这在查询的结果集特别大时会有各种问题，比如消耗太多服务器资源，或造成运行的脚本因内存超限而终止。
下面的代码使用PDO对象的setAttribute方法来禁用缓存。
<?php
$dsn = "mysql:host=" . DATABASE_HOST . ";port=" . DATABASE_PORT . ";dbname=" . DATABASE_NAME;
$username = DATABASE_USERNAME;
$passwd = DATABASE_PASSWORD;
$pdoConn = new PDO($dsn, $username, $passwd);

$sql = "select * from big_table"; //假设这个表行数超多

$pdoConn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); //禁用缓存
$stmt = $pdoConn->query($sql);
$i = -1;
while ($row = $stmt->fetch()) {
    $i ++;
    if ($i % 10000) { //每一万个数据采样显示一下
        continue;
    }
    var_dump($i);
    var_dump($row);
}
?>

資料庫支援
firebird
informix
mysql
mssql
odbc
pgsql
sqlite

 参考文献 

 外部連結 
 测试PDO函数在线

Category:PHP