网站首页mysql

编译安装pdo_oci扩展,使用PHP连接oracle

发布时间:2018-10-18 16:10:55编辑:slayer.hover阅读(671)

    在centos上使用PHP的PDO模块连接oracle数据库时,提示:could not find driver, 应该是pdo的oracle模块没安装。


    1. 下载PHP7.2最新源码包和oracle的客户端

    oracle当前最新客户端的rpm包:

    basic包oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm 

    devel包oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm

    安装:

    rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
    rpm -ivh oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm


    2. 导入环境变量

    vim ~/.bash_profile

    加入:

    export ORACLE_HOME=/usr/lib/oracle/18.3/client64
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib

    然后执行

    source ~/.bash_profile

    使环境变量生效。


    3.开始编译PHP的pdo_oci扩展, PHP源码包解压后

    a>cd ~/src/php-7.2.8/ext/pdo_oci
    b>phpize
    c>./configure --with-php-config=/usr/local/php72/bin/php-config --with-pdo-oci=instantclient,/usr/lib/oracle/18.3/client64/lib
    d>make && make install


    4. 编辑php.ini,加入pdo_oci.so扩展。

    vim /usr/local/php72/etc/php.ini

    插入

    extension=pdo_oci


    5.重启PHP-fpm,执行php -m可以看到pdo_oci扩展,完成。


    -------------------------------------------------------------------


    执行一段PHP代码看看:

    <?php
    try {
        $conn = new PDO("oci:dbname=//127.0.0.1:1521/XE;charset=AL32UTF8", 'test', '111111');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql  = "select table_name from user_tables";
        $res  = $conn->query($sql);
        $data = $res->fetchAll(PDO::FETCH_ASSOC);
        print_r($data);
        $sql  = "select * from test";
        $res  = $conn->query($sql);
        $data = $res->fetchAll(PDO::FETCH_ASSOC);
        print_r($data);
    }
    catch(PDOException $e)
    {
        echo "ODBC异常: ".$e->getMessage();
    }


    可以看到执行结果。   

    备注:使用Navicat建的表, 查询时表名和字段名都必须加上双引号,否则提示:

    SQLSTATE[HY000]: General error: 942 OCIStmtExecute: ORA-00942: table or view does not exist。

    自己用SQL建的表不加双引号就没这问题。



评论