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

  • 相关阅读:
    SpringBoot集成Mybatis
    SpringBoot环境搭建
    阻止a标签的默认行为有哪几种方法
    mouseover 和mouseenter的区别;冒泡与捕获的区别;冒泡与捕获的如何阻止
    操作dom
    谷歌火狐,IE8以及其他浏览器获取页面滚动出去的距离以及封装
    return的返回值
    js进阶之js三大家族:offset,scroll,client
    固定导航栏,获取页面可视区域的大小,响应式布局,事件对象极其三大坐标系
    document.write,innerHTML,createElement三者的区别
  • 原文地址:https://www.cnblogs.com/jukan/p/5486325.html
Copyright © 2011-2022 走看看