PHP Data Objects
超文本预处理器數據庫通信擴展
PDO(PHP Data Objects)是一種在PHP裡連接資料庫的使用介面[1]。PDO與mysqli[2]曾經被建議用來取代原本PHP在用的mysql[3]相關函式,基於資料庫使用的安全性,因為後者欠缺對於SQL資料隱碼的防護[4]。
範例
編輯以下是一個簡單的 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);
}
?>
資料庫支援
編輯參考文獻
編輯- ^ PHP: PDO - Manual. [2014-02-18]. (原始內容存檔於2014-02-23).
- ^ MySQL Improved Extension. [2014-02-18]. (原始內容存檔於2014-02-23).
- ^ Original MySQL API. [2014-02-18]. (原始內容存檔於2014-02-23).
- ^ PHP-DEV deprecating ext/mysql' - MARC. [2014-02-18]. (原始內容存檔於2014-10-14).