mysql 连接池 pdo_使用PDO连接多种数据库

在PHP 5之前,想要连接MySQL数据库就需要使用mysql或mysqli等一系列函数来操作数据库。例如,我们使用mysql系列数据库函数进行查询操作,对应的示例代码如下:

//创建数据库连接

$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]
";

}

mysql_free_result($res);

mysql_close($link);

?>

同样的,如果我们要使用PHP连接Oracle、DB2或者其他数据库,如上述代码所示一样,也需要使用到诸如db2_connect、db2_fetch_row、db2_close、oci_connect、oci_fetch_row、oci_close等许多以对应数据库开头的PHP函数。

如果我们的程序中有连接多个数据库的需要,我们就必须编写对应的操作不同数据库的多个工具类(或函数)。显然,这样的数据库访问API对PHP开发人员来说显得并不友好,给我们开发涉及多个数据库的程序徒增了许多烦恼。

不过,从PHP 5版本之后,这种状况得以改善。在 PHP 5及其后的版本中,PHP为我们提供了一套全新的数据库访问API扩展——PHP数据对象(PDO)。PDO扩展库为PHP访问数据库定义了一个轻量级的一致接口。它是一个抽象的数据访问接口,我们可以方便地使用它来统一操作各种不同的数据库。例如,我们以PDO方式再次重写上述示例,代码如下:

$type = 'mysql'; //数据库类型

$db_name = 'test'; //数据库名

$host = '127.0.0.1';

$username = 'root';

$password = 'ready';

$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]
";

}

$pdo = null;

?>

此时,如果我们需要将数据库从MySQL迁移到DB2或者Oracle上,PHP程序中对应的改动就非常简单,其他地方无需多作更改,我们只需要将变量$type设置为ODBC或者OCI即可。

备注

到目前为止,PHP PDO扩展连接DB2,需要以ODBC方式连接,因此$type需设置ODBC。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值