zoukankan      html  css  js  c++  java
  • 使用PDO连接多种数据库

    在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_connectdb2_fetch_rowdb2_closeoci_connectoci_fetch_rowoci_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即可。

    备注:
    1.到目前为止,PHP PDO扩展连接DB2,需要以ODBC方式连接,因此$type需设置ODBC2.PHP PDO扩展库只是一个数据访问的抽象接口,如果要连接不同的数据库,需要添加实现了PDO接口的对应数据库驱动。当然,PHP已经给我们准备好了一些数据库驱动扩展程序(存放在PHP安装目录/ext目录下),例如php_pdo_mysql.dll(用于MySQL)、php_pdo_oci.dll(用于Oracle)、php_pdo_odbc.dll(用于以ODBC形式访问的数据库)。虽然不同数据库驱动的底层实现不一样,但是对于我们开发人员来说,却是使用相同的方式来访问数据库,PDO在中间已经帮我们做了相应的转换处理工作。
    3.在php.ini配置文件中,官方提供的默认配置并没有启用pdo扩展(mysql、mysqli扩展也没有启动),我们需要在php.ini中启用对应的pdo扩展库:
    ;需要使用何种数据库,就去掉配置文件对应行前面的注释符号";"
    extension=php_pdo_mysql.dll
    ;extension=php_pdo_oci.dll
    ;extension=php_pdo_odbc.dll
    时不我待,不负韶华!立刻行动!不吃学习的苦就会吃生活的苦!
  • 相关阅读:
    手工测试
    测试理论
    MySQL常用语法
    Linux设置静态ip
    设计模式
    Shiro
    TreeSet和TreeMap
    UDP和反射
    Linux归纳
    Spring+SpringMVC+Mybatis整合
  • 原文地址:https://www.cnblogs.com/zrp2013/p/3524564.html
Copyright © 2011-2022 走看看