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). 

外部連結

编辑

📚 Artikel Terkait di Wikipedia

PDO

PDO可以指: PHP Data Objects 1,3-丙二醇,1,3-Propanediol 氧化钯,PdO 伪微分算子,Pseudo-differential operator 原產地名稱保護,Protected designation of origin 太平洋十年涛动,Pacific Decadal

PHP

4正式釋出,2004年7月13日則釋出了PHP 5,PHP 5則使用了第二代的Zend Engine。PHP 5包含了許多新特色,像是強化的物件導向功能、引入PDO(PHP Data Objects,一個存取資料庫的延伸函式庫)、以及許多效能上的增強。目前PHP 4已經不會繼續更新,以鼓勵用戶轉移到PHP 5。 2008年时,PHP 5成為了PHP唯一維護中的穩定版本。

对象关系映射软件列表

Platform Enterprise Objects Framework,Mac OS X/Java,是苹果公司WebObjects的一部分 Hibernate,开源 ORM 框架,广泛使用 iBATIS,由ASF维护,并且有 .NET移植 Java Data Objects (JDO) Java Persistence

Core Data

Data的这一方面类似于原始的Enterprise Objects Framework(英语:Enterprise Objects Framework)(EOF)系统,但EOF中开发者可以使用相对简洁的查询方式,而在Core Data中,只能使用一个语法类似SQL子集的查询语言,称为Predicate。

ADOdb

ADOdb是Active Data Objects database的简称,它是一种PHP存取数据库的函式组件。它允许程序员以一致的方式来存取数据库,从而忽略后台数据库的种类的差异。它的优势是能让程序员在转移数据库平台时,可以不用花费大量时间重新书写代码。它支持以下数据库:

服务数据对象

for PHP[永久失效連結] project SDO规范 (页面存档备份,存于互联网档案馆) 服务数据对象简介 (页面存档备份,存于互联网档案馆) CodeFutures Introduction to Service Data Objects Introducing Service Data Objects

太阳系天体大小列表

detached objects observed with Herschel Space Observatory-PACS (页面存档备份,存于互联网档案馆) Wm. Robert Johnston. List of Known Trans-Neptunian Objects. Johnston's

数据访问对象

ISBN 9781783986576 (英语).  Java Persistence - The DAO Design Pattern (页面存档备份,存于互联网档案馆) PHP best practices (Use Data Access Objects (DAO)) (页面存档备份,存于互联网档案馆)