18.4 建立PDO對象php
使用PDO在與不一樣數據庫管理系統之間交互時,PDO對象中的成員的方法是統一各類數據庫的訪問接口,因此在使用PDO與數據庫交互以前,首先要建立一個PDO對象。在經過構造方法建立對象的同時,須要創建一個與數據庫服務器的鏈接,並選擇一個數據庫。PDO的構造方法原型以下:數據庫
__construct ( string dsn [, string username [, string password [, array driver_options]]] ) //PDO的構造方法數組
在構造方法中,第一個必選的參數是數據源名(DSN),用來定義一個肯定的數據庫和必須用到的驅動程序。DSN的PDO命名慣例爲PDO驅動程序的名稱,後面跟一個冒號,再後面是可選的驅動程序的數據庫鏈接變量信息,如主機名、端口和數據庫名。例如,鏈接Oracle服務器和鏈接MySQL服務器的DSN格式分別以下:服務器
oci:dbname=//localhost:1521/mydb //鏈接Oracle服務器的DSN,oci:做爲驅動前綴,主機localhost,端口1521,數據庫mydboracle
MySQL:host=localhost;dbname=testdb //鏈接MySQL服務器的DSN,MySQL:做爲驅動前綴,主機localhost,數據庫testdb函數
構造方法中的第二個參數username和第三個參數password分別指定用於鏈接數據庫的用戶名和密碼,是可選參數。最後一個參數driver_options須要一個數組,用來指定鏈接所需的全部額外選項,傳遞附加的調優參數到PDO或底層驅動程序。3d
18.4.1 以多種方式調用構造方法對象
能夠多種方式調用構造方法建立PDO對象。下面以鏈接MySQL和Oracle服務器爲例,分別介紹構造方法的多種調用方式。接口
1.將參數嵌入構造函數進程
在下面的鏈接Oracle服務器的示例中,在DSN字符串中加載OCI驅動程序並指定了兩個可選參數:第一個是數據庫名稱;第二個是字符集。使用特定的字符集鏈接一個特定的數據庫;若是不指定任何信息,會使用默認的數據庫。代碼以下所示:
OCI:dbname=accounts告訴PDO它應該使用OCI驅動程序,而且應該使用accounts數據庫。對於MySQL驅動程序,第一個冒號後面的全部內容都將被用做MySQL的DSN。鏈接MySQL服務器代碼以下所示:
其餘驅動程序會一樣以不一樣的方式解釋它的DSN。若是沒法加載驅動程序,或者鏈接失敗,則會拋出一個PDOException,以便開發人員決定如何最好地處理該故障。省略try…catch控制結構並沒有裨益,若是在應用程序的較高級別沒有定義異常處理的方式,則在沒法創建數據庫鏈接的狀況下,終止該腳本。
2.將參數存放在文件中
在建立PDO對象時,能夠把DSN字符串放在另外一個本地或遠程文件中,並在構造函數中引用這個文件。代碼以下所示:
只要將文件/usr/local/dbconnect中的DSN驅動改變,就能夠在多個數據庫系統之間切換,但要確保該文件由負責執行PHP腳本的用戶所擁有,並且此用戶擁有必要的權限。
3.引用php.ini文件
只要在php.ini文件中把DSN信息賦給一個名爲pdo.dsn.aliasname的配置參數,就能夠在PHP服務器的配置文件中維護DSN信息,這裏aliasname是後面將提供給構造函數的DSN別名。以下所示,鏈接Oracle服務器,在php.ini中爲DSN指定的別名爲oraclepdo:
[PDO]
pdo.dsn.oraclepdo="OCI:dbname=//localhost:1521/mydb;charset=UTF-8";
從新啓動Oracle服務器,就能夠在PHP程序中調用PDO構造方法時,在第一個參數中使用這個別名,代碼以下所示:
4.PDO與鏈接有關的選項
在建立PDO對象時,有一些與數據庫鏈接有關的選項,能夠將必要的幾個選項組成數組傳遞給構造方法的第四個參數driver_opts,用來傳遞附加的調優參數到PDO或底層驅動程序。PDO的一些與數據庫鏈接有關的選項如表18-2所示。
表18-2 PDO的一些與數據庫鏈接有關的選項
設置選項名爲下標組成的關聯數組,做爲驅動程序特定的鏈接選項,傳遞給PDO構造方法的第四個參數。在下面的示例中使用鏈接選項建立持久鏈接,持久鏈接的好處是可以避免在每一個頁面執行時都打開和關閉數據庫服務器鏈接,速度更快。如MySQL數據庫的一個進程建立了兩個鏈接,PHP則會把原有鏈接與新的鏈接合併爲一個鏈接。代碼以下所示:
18.4.2 PDO對象中的成員方法
當PDO對象建立成功後,與數據庫的鏈接已經創建,就可使用該對象了。PHP與數據庫服務器之間的交互都是經過PDO對象中的成員方法實現的,PDO對象中的成員方法如表18-3所示。
表18-3 PDO對象中的成員方法(共13個)
從表18-3中PDO對象中的成員方法能夠看出,使用PDO對象能夠完成與數據庫服務器之間的鏈接管理、存取屬性、錯誤處理、查詢執行、預處理語句,以及事務等操做。