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

<?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);
?>

同样的,如果我们要使用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方式再次重写上述示例,代码如下:

<?php

$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]<br/>";
}
$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官方文档。

使用PDO连接多种数据库的更多相关文章

  1. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  2. //使用PDO连接mysql数据库

    <?php //使用PDO连接mysql数据库 class pdo_con{     var $dsn = 'mysql:dbname=test; host:127.0.0.1';     va ...

  3. php之PDO连接mysql数据库,增删改查等等操作实例

    我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严就有SQL注入风险,导致网站被攻击. 虽然可以用mysql_real_escape_string ...

  4. QT连接多种数据库f方法及测试

    QT提供了对多种数据库的访问支持,对SQL Server也可以通过ODBC来进行访问.要想顺利访问SQL Server. 首先要保证以下几点:1. QT编译时已经编译了QtSql2. 编译了ODBC插 ...

  5. PDO连接mysql数据库加载慢

    今天在使用PDO连接mysql操作数据库的时候,发现速度特别慢,都1~2s的时间,不知道怎么回事,后来一步一步排除到new PDO 导致过慢的原因, 这个尴尬了...,调试了半天都没想到问下度娘,才知 ...

  6. php使用PDO连接mysql数据库

    <?php $dsn='mysql:host=localhost;dbname=mssc'; $user='root'; $password=''; $status=1; try { $sql= ...

  7. PDO连接mysql和pgsql数据库

    PDO连接mysql数据库 <?php $dsn="mysql:host=localhsot;dbname=lamp87"; $user="root"; ...

  8. php类模块引擎PDO操作MySQL数据库简单阐述

    PDO是什么呢? 通俗说就是别人写的一个“数据库操作工具类”,它非常强大,可以应对市面上几乎所有主流数据库, 具体应用时候有这样一个关系: 即,要操作某种数据,就得去“打开”对应的pdo引擎. 在ph ...

  9. PHP连接MySQL数据库的几种方式

    PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi :MySQLi 只针对 MySQL 数据库,MySQLi 还提供了 API 接口. PDO (PHP Data Objects ...

随机推荐

  1. sublime text 3 中 SFTP插件 的 配置

    SFTP 插件.主要功能就是通过 FTP/SFTP 连接远程服务器并获取文件列表,可以选择下载编辑.重命名.删除等等操作,点下载编辑之后,可以打开这个文件进行修改.修改完成之后,保存一下会自动上传到远 ...

  2. 2015年9月28日JQuery提前预习预热笔记

    visual studio下载2010 2010与2008不一样,2008需要添加补丁,采用调用对象.2010可以直接用. JQuery=$ 是函数是方法是对象 念J快儿,念doler 开发人员工具( ...

  3. editpuls查找替换通配符

    1  \t    Tab character.         tab符号 2  \n    New line.              新的一行(换行符) 3  .     Matches any ...

  4. 导入excel数据

    前提条件:先要安装好EXCEL软件. 程序中经常要用到导入excel数据的功能.其实通过ole操作excel就简单的几行代码,但记性不好,经常要用经常要找, 还是作篇笔记吧. var ExcelApp ...

  5. 浅谈js观察者模式

    观察者模式又叫发布订阅模式,它可以让多个观察者对象同时监听某一个主题对象,即在一个事件发生时,不同的对象迅速对其进行相应.就比如当又人闯红灯,不同的人对这件事迅速发起响应,当然这个比喻不太恰当,不过在 ...

  6. cookie机制

    Cookie通过在客户端记录信息确定用户身份 一个用户的所有请求操作都应该属于同一个会话, HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接. ...

  7. Android_消息机制

    Android通过Looper.Handler来实现消息循环机制. Android的消息循环是针对线程的,每个线程都可以有自己的消息队列和消息循环. Android系统中的Looper负责管理线程的消 ...

  8. 重要常用的Lunix命令

    lunix 命令大全:  http://man.linuxde.net/ 复制文件/文件夹 复制到本地 文件夹:scp -r work@www.abc.com:/home/work/project / ...

  9. Spring 3.0 注解注入详解

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  10. 利用http协议实现图片窃取

    在http协议里有一个referer,用来标示站点来源,大家都遇到这样的情况.转载了一篇博客,图片显示不正常,就和头信息里这个有关 原理:在webserver里面.依据http协议里面refered头 ...