POD擴展是在PHP5中加入,該擴展提供PHP內置類 PDO來對數據庫進行訪問,不一樣數據庫使用相同的方法名,解決數據庫鏈接不統一的問題。php
PDO的特色:html
性能。PDO 從一開始就吸收了現有數據庫擴展成功和失敗的經驗教訓。由於 PDO 的代碼是全新的,因此咱們有機會從新開始設計性能,以利用 PHP 5 的最新特性。
能力。PDO 旨在將常見的數據庫功能做爲基礎提供,同時提供對於 RDBMS 獨特功能的方便訪問。
簡單。PDO 旨在使您可以輕鬆使用數據庫。API 不會強行介入您的代碼,同時會清楚地代表每一個函數調用的過程。
運行時可擴展。PDO 擴展是模塊化的,使您可以在運行時爲您的數據庫後端加載驅動程序,而沒必要從新編譯或從新安裝整個 PHP 程序。例如,PDO_OCI 擴展會替代 PDO 擴展實現 oracle 數據庫 API。還有一些用於 MySQL、PostgreSQL、ODBC 和 Firebird 的驅動程序,更多的驅動程序尚在開發。mysql
PDO 安裝sql
你能夠經過 PHP 的 phpinfo() 函數來查看是否安裝了PDO擴展。數據庫
1.在 Unix /Linux系統上安裝 PDO後端
在Unix上或Linux上你須要添加如下擴展:數組
extension=pdo.so
2.在Windows安裝pdo服務器
PDO 和全部主要的驅動做爲共享擴展隨 PHP 一塊兒發佈,要激活它們只需簡單地編輯 php.ini 文件,並添加如下擴展:oracle
extension=php_pdo.dll模塊化
除此以外還有如下對應的各類數據庫擴展:
;extension=php_pdo_firebird.dll ;extension=php_pdo_informix.dll ;extension=php_pdo_mssql.dll ;extension=php_pdo_mysql.dll ;extension=php_pdo_oci.dll ;extension=php_pdo_oci8.dll ;extension=php_pdo_odbc.dll ;extension=php_pdo_pgsql.dll ;extension=php_pdo_sqlite.dll
打開php.ini把上面全部行前面的分號去掉就能夠了。
在設定好這些配置後,咱們須要重啓PHP 或 Web服務器。
下面咱們以mysql爲例來使用pdo:
<?php
$dbms='mysql'; //數據庫類型
$host='localhost'; //數據庫主機名
$dbName='test'; //使用的數據庫
$user='root'; //數據庫鏈接用戶名
$pass=''; //對應的密碼
$dsn="$dbms:host=$host;dbname=$dbName"; try { $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象 echo "鏈接成功<br/>"; /*你還能夠進行一次搜索操做 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你能夠用 echo($GLOBAL); 來看到這些值 } */ $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } //默認這個不是長鏈接,若是須要數據庫長鏈接,須要最後加一個參數:array(PDO::ATTR_PERSISTENT => true) 變成這樣: $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); ?>
再來看看pdo的詳細介紹:
1.預約義常量:
PDO::PARAM_BOOL (integer) | 表示布爾數據類型。 |
PDO::PARAM_NULL (integer) | 表示 SQL 中的 NULL 數據類型。 |
PDO::PARAM_INT (integer) | 表示 SQL 中的整型。 |
PDO::PARAM_STR (integer) | 表示 SQL 中的 CHAR、VARCHAR 或其餘字符串類型。 |
PDO::PARAM_LOB (integer) | 表示 SQL 中大對象數據類型。 |
PDO::PARAM_STMT (integer) | 表示一個記錄集類型。當前還沒有被任何驅動支持。 |
PDO::PARAM_INPUT_OUTPUT (integer) | 指定參數爲一個存儲過程的 INOUT 參數。必須用一個明確的 PDO::PARAM_* 數據類型跟此值進行按位或。 |
PDO::FETCH_LAZY (integer) | 指定獲取方式,將結果集中的每一行做爲一個對象返回,此對象的變量名對應着列名。PDO::FETCH_LAZY 建立用來訪問的對象變量名。在 PDOStatement::fetchAll() 中無效。 |
PDO::FETCH_ASSOC (integer) | 指定獲取方式,將對應結果集中的每一行做爲一個由列名索引的數組返回。若是結果集中包含多個名稱相同的列,則PDO::FETCH_ASSOC每一個列名只返回一個值。 |
PDO::FETCH_NAMED (integer) | 指定獲取方式,將對應結果集中的每一行做爲一個由列名索引的數組返回。若是結果集中包含多個名稱相同的列,則PDO::FETCH_ASSOC每一個列名 返回一個包含值的數組。 |
PDO::FETCH_NUM (integer) | 指定獲取方式,將對應結果集中的每一行做爲一個由列號索引的數組返回,從第 0 列開始。 |
PDO::FETCH_BOTH (integer) | 指定獲取方式,將對應結果集中的每一行做爲一個由列號和列名索引的數組返回,從第 0 列開始。 |
PDO::FETCH_OBJ (integer) | 指定獲取方式,將結果集中的每一行做爲一個屬性名對應列名的對象返回。 |
PDO::FETCH_BOUND (integer) | 指定獲取方式,返回 TRUE 且將結果集中的列值分配給經過 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法綁定的 PHP 變量。 |
PDO::FETCH_COLUMN (integer) | 指定獲取方式,從結果集中的下一行返回所須要的那一列。 |
PDO::FETCH_CLASS (integer) | 指定獲取方式,返回一個所請求類的新實例,映射列到類中對應的屬性名。 注意: 若是所請求的類中不存在該屬性,則調用 __set() 魔術方法 |
PDO::FETCH_INTO (integer) | 指定獲取方式,更新一個請求類的現有實例,映射列到類中對應的屬性名。 |
PDO::FETCH_FUNC (integer) | 容許在運行中徹底用自定義的方式處理數據。(僅在 PDOStatement::fetchAll() 中有效)。 |
PDO::FETCH_GROUP (integer) | 根據值分組返回。一般和 PDO::FETCH_COLUMN 或 PDO::FETCH_KEY_PAIR 一塊兒使用。 |
PDO::FETCH_UNIQUE (integer) | 只取惟一值。 |
PDO::FETCH_KEY_PAIR (integer) | 獲取一個有兩列的結果集到一個數組,其中第一列爲鍵名,第二列爲值。自 PHP 5.2.3 起可用。 |
PDO::FETCH_CLASSTYPE (integer) | 根據第一列的值肯定類名。 |
PDO::FETCH_SERIALIZE (integer) | 相似 PDO::FETCH_INTO ,可是以一個序列化的字符串表示對象。自 PHP 5.1.0 起可用。從 PHP 5.3.0 開始,若是設置此標誌,則類的構造函數從不會被調用。 |
PDO::FETCH_PROPS_LATE (integer) | 設置屬性前調用構造函數。自 PHP 5.2.0 起可用。 |
PDO::ATTR_AUTOCOMMIT (integer) | 若是此值爲 FALSE ,PDO 將試圖禁用自動提交以便數據庫鏈接開始一個事務。 |
PDO::ATTR_PREFETCH (integer) | 設置預取大小來爲你的應用平衡速度和內存使用。並不是全部的數據庫/驅動組合都支持設置預取大小。較大的預取大小致使性能提升的同時也會佔用更多的內存。 |
PDO::ATTR_TIMEOUT (integer) | 設置鏈接數據庫的超時秒數。 |
PDO::ATTR_ERRMODE (integer) | 關於此屬性的更多信息請參見 錯誤及錯誤處理 部分。 |
PDO::ATTR_SERVER_VERSION (integer) | 此爲只讀屬性;返回 PDO 所鏈接的數據庫服務的版本信息。 |
PDO::ATTR_CLIENT_VERSION (integer) | 此爲只讀屬性;返回 PDO 驅動所用客戶端庫的版本信息。 |
PDO::ATTR_SERVER_INFO (integer) | 此爲只讀屬性。返回一些關於 PDO 所鏈接的數據庫服務的元信息。 |
PDO::ATTR_CONNECTION_STATUS (integer) | |
PDO::ATTR_CASE (integer) | 用相似 PDO::CASE_* 的常量強制列名爲指定的大小寫。 |
PDO::ATTR_CURSOR_NAME (integer) | 獲取或設置使用遊標的名稱。當使用可滾動遊標和定位更新時候很是有用。 |
PDO::ATTR_CURSOR (integer) | 選擇遊標類型。 PDO 當前支持 PDO::CURSOR_FWDONLY 和 PDO::CURSOR_SCROLL。通常爲 PDO::CURSOR_FWDONLY,除非確實須要一個可滾動遊標。 |
PDO::ATTR_DRIVER_NAME (string) | 返回驅動名稱。 使用 PDO::ATTR_DRIVER_NAME 的例子: <?php if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { echo "Running on mysql; doing something mysql specific here\n"; } ?> |
PDO::ATTR_ORACLE_NULLS (integer) | 在獲取數據時將空字符串轉換成 SQL 中的 NULL 。 |
PDO::ATTR_PERSISTENT (integer) | 請求一個持久鏈接,而非建立一個新鏈接。關於此屬性的更多信息請參見 鏈接與鏈接管理 。 |
PDO::ATTR_STATEMENT_CLASS (integer) | |
PDO::ATTR_FETCH_CATALOG_NAMES (integer) | 將包含的目錄名添加到結果集中的每一個列名前面。目錄名和列名由一個小數點分開(.)。此屬性在驅動層面支持,因此有些驅動可能不支持此屬性。 |
PDO::ATTR_FETCH_TABLE_NAMES (integer) | 將包含的表名添加到結果集中的每一個列名前面。表名和列名由一個小數點分開(.)。此屬性在驅動層面支持,因此有些驅動可能不支持此屬性。 |
PDO::ATTR_STRINGIFY_FETCHES (integer) | |
PDO::ATTR_MAX_COLUMN_LEN (integer) | |
PDO::ATTR_DEFAULT_FETCH_MODE (integer) | 自 PHP 5.2.0 起可用。 |
PDO::ATTR_EMULATE_PREPARES (integer) | 自 PHP 5.1.3 起可用。 |
PDO::ERRMODE_SILENT (integer) | 若是發生錯誤,則不顯示錯誤或異常。但願開發人員顯式地檢查錯誤。此爲默認模式。關於此屬性的更多信息請參見 錯誤與錯誤處理 。 |
PDO::ERRMODE_WARNING (integer) | 若是發生錯誤,則顯示一個 PHP E_WARNING 消息。關於此屬性的更多信息請參見 錯誤與錯誤處理。 |
PDO::ERRMODE_EXCEPTION (integer) | 若是發生錯誤,則拋出一個 PDOException 異常。關於此屬性的更多信息請參見 錯誤與錯誤處理。 |
PDO::CASE_NATURAL (integer) | 保留數據庫驅動返回的列名。 |
PDO::CASE_LOWER (integer) | 強制列名小寫。 |
PDO::CASE_UPPER (integer) | 強制列名大寫。 |
PDO::NULL_NATURAL (integer) | |
PDO::NULL_EMPTY_STRING (integer) | |
PDO::NULL_TO_STRING (integer) | |
PDO::FETCH_ORI_NEXT (integer) | 在結果集中獲取下一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_PRIOR (integer) | 在結果集中獲取上一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_FIRST (integer) | 在結果集中獲取第一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_LAST (integer) | 在結果集中獲取最後一行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_ABS (integer) | 根據行號從結果集中獲取須要的行。僅對可滾動遊標有效。 |
PDO::FETCH_ORI_REL (integer) | 根據當前遊標位置的相對位置從結果集中獲取須要的行。僅對可滾動遊標有效。 |
PDO::CURSOR_FWDONLY (integer) | 建立一個只進遊標的 PDOStatement 對象。此爲默認的遊標選項,由於此遊標最快且是 PHP 中最經常使用的數據訪問模式。 |
PDO::CURSOR_SCROLL (integer) | 建立一個可滾動遊標的 PDOStatement 對象。經過 PDO::FETCH_ORI_* 常量來控制結果集中獲取的行。 |
PDO::ERR_NONE (string) | 對應 SQLSTATE '00000',表示 SQL 語句沒有錯誤或警告地成功發出。當用 PDO::errorCode() 或 PDOStatement::errorCode() 來肯定是否有錯誤發生時,此常量很是方便。在檢查上述方法返回的錯誤狀態代碼時,會常常用到。 |
PDO::PARAM_EVT_ALLOC (integer) | 分配事件 |
PDO::PARAM_EVT_FREE (integer) | 解除分配事件 |
PDO::PARAM_EVT_EXEC_PRE (integer) | 執行一條預處理語句以前觸發事件。 |
PDO::PARAM_EVT_EXEC_POST (integer) | 執行一條預處理語句以後觸發事件。 |
PDO::PARAM_EVT_FETCH_PRE (integer) | 從一個結果集中取出一條結果以前觸發事件。 |
PDO::PARAM_EVT_FETCH_POST (integer) | 從一個結果集中取出一條結果以後觸發事件。 |
PDO::PARAM_EVT_NORMALIZE (integer) | 在綁定參數註冊容許驅動程序正常化變量名時觸發事件。 |
2.PDO 類: