在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官方文档。