在PHP 5以前,想要鏈接MySQL數據庫就須要使用mysql或mysqli等一系列函數來操做數據庫。例如,咱們使用mysql系列數據庫函數進行查詢操做,對應的示例代碼以下:php
<?php
//建立數據庫鏈接
$link = mysql_connect('127.0.0.1', 'username', 'password') or die('鏈接數據庫失敗!');
mysql_select_db('test', $link); //選擇指定的數據庫
$res = mysql_query('SELECT id, body FROM demo', $link);
while ($row = mysql_fetch_row($res)) {
echo "id=$row[0],body=$row[1]<br/>";
}
mysql_free_result($res);
mysql_close($link);
?>mysql
一樣的,若是咱們要使用PHP鏈接Oracle、DB2或者其餘數據庫,如上述代碼所示同樣,也須要使用到諸如db2_connect、db2_fetch_row、db2_close、oci_connect、oci_fetch_row、oci_close等許多以對應數據庫開頭的PHP函數。sql
若是咱們的程序中有鏈接多個數據庫的須要,咱們就必須編寫對應的操做不一樣數據庫的多個工具類(或函數)。顯然,這樣的數據庫訪問API對PHP開發人員來講顯得並不友好,給咱們開發涉及多個數據庫的程序徒增了許多煩惱。數據庫
不過,從PHP 5版本以後,這種情況得以改善。在 PHP 5及其後的版本中,PHP爲咱們提供了一套全新的數據庫訪問API擴展——PHP數據對象(PDO)。PDO擴展庫爲PHP訪問數據庫定義了一個輕量級的一致接口。它是一個抽象的數據訪問接口,咱們能夠方便地使用它來統一操做各類不一樣的數據庫。例如,咱們以PDO方式再次重寫上述示例,代碼以下:函數
<?php工具
$type = 'mysql'; //數據庫類型
$db_name = 'test'; //數據庫名
$host = '127.0.0.1';
$username = 'root';
$password = 'ready';fetch
$dsn = "$type:host=$host;dbname=$db_name";
try {
$pdo = new PDO($dsn, $username, $password);
} catch (Exception $e) {
die('鏈接數據庫失敗!');
}
$stmt = $pdo->query('SELECT id, body FROM demo');
while ($row = $stmt->fetch()) {
echo "id=$row[0],body=$row[1]<br/>";
}
$pdo = null;
?>對象
此時,若是咱們須要將數據庫從MySQL遷移到DB2或者Oracle上,PHP程序中對應的改動就很是簡單,其餘地方無需多做更改,咱們只須要將變量$type設置爲ODBC或者OCI便可。
備註接口
到目前爲止,PHP PDO擴展鏈接DB2,須要以ODBC方式鏈接,所以$type需設置ODBC。ci
PHP PDO擴展庫只是一個數據訪問的抽象接口,若是要鏈接不一樣的數據庫,須要添加實現了PDO接口的對應數據庫驅動。固然,PHP已經給咱們準備好了一些數據庫驅動擴展程序(存放在PHP安裝目錄/ext目錄下),例如php_pdo_mysql.dll(用於MySQL)、php_pdo_oci.dll(用於Oracle)、php_pdo_odbc.dll(用於以ODBC形式訪問的數據庫)。雖然不一樣數據庫驅動的底層實現不同,可是對於咱們開發人員來講,倒是使用相同的方式來訪問數據庫,PDO在中間已經幫咱們作了相應的轉換處理工做。
在php.ini配置文件中,官方提供的默認配置並無啓用pdo擴展(mysql、mysqli擴展也沒有啓動,咱們須要在php.ini中啓用對應的pdo擴展庫:
;須要使用何種數據庫,就去掉配置文件對應行前面的註釋符號";"
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
更多PDO的相關用法,請參考PHP官方文檔。