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

資料庫支援[编辑]

参考文献[编辑]

  1. ^ PHP: PDO - Manual. [2014-02-18]. (原始内容存档于2014-02-23). 
  2. ^ MySQL Improved Extension. [2014-02-18]. (原始内容存档于2014-02-23). 
  3. ^ Original MySQL API. [2014-02-18]. (原始内容存档于2014-02-23). 
  4. ^ PHP-DEV deprecating ext/mysql' - MARC. [2014-02-18]. (原始内容存档于2014-10-14). 

外部連結[编辑]