【问题标题】:How to connect to Oracle database?如何连接到Oracle数据库?
【发布时间】:2010-09-10 09:47:10
【问题描述】:

如何在 MAC OS X 上使用 PHP 连接到 Oracle?

【问题讨论】:

    标签: php database oracle macos


    【解决方案1】:

    对于 osx 10.6 64bit 上的 Instantclient,请执行以下操作:

    下载即时客户端库和 sdk,将它们全部放在一个文件夹中。如果您在 64 位机器上,请确保获得 64 位库,32 位将无法工作! - 先用sqlplus测试

    如果不存在则创建它

    sudo vi /etc/launchd.conf
    

    并添加到文件中(使用您自己的路径!)

    setenv DYLD_LIBRARY_PATH /usr/oracle_instantClient64
    

    此时您可能需要重新启动系统,以便 launchd 将路径传递给 apache 以获取路径,或者查看重新启动 launchd 是否有效,尽管我感觉无论如何都会重新启动系统!

    您应该在 php.ini 中添加“extension=oci8.so”

    sudo vi /etc/php.ini
    

    如果该文件不存在,则复制 php.ini.default

    sudo cp /etc/php.ini.default /etc/php.ini
    

    然后添加上面的扩展名,文件后面有一个包含很多扩展名的部分,把它放在那里

    oci 需要一个库符号链接,所以这样做

    sudo ln -s $DYLD_LIBRARY_PATH/libclntsh.dylib.10.1 $DYLD_LIBRARY_PATH/libclntsh.dylib
    

    oracle 二进制文件中还有一些奇怪的硬编码库链接,因此请修复它

    mkdir -p /b/227/rdbms/
    

    它只寻找 oracle 库,所以将其链接回来

    ln -s /usr/oracle_instantClient64/ /b/227/rdbms/lib
    

    现在从 pear 存储库安装 oci8。如果您在未升级的情况下安装了雪豹 osx 10.6,您可能会遇到 pear 和 pecl 的问题。如果是这样,您将需要先安装 pear。见:https://discussions.apple.com/thread/2602597?start=0&tstart=0

    sudo pecl install oci8
    

    提示:不要使用自动检测,当它询问您时指定即时客户端路径..

    instantclient,/usr/oracle_instantClient64
    

    重启apache

    sudo apachectl graceful
    

    通过在浏览器中导航到 URL 进行测试,或者您可以直接在命令行中调用该文件

    php index.php
    

    就是这样 使用以下作为测试文件..

    <?php 
    
    $dbHost = "localhostOrDatabaseURL";
    $dbHostPort="1521";
    $dbServiceName = "servicename";
    $usr = "username";
    $pswd = "password";
    $dbConnStr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
                (HOST=".$dbHost.")(PORT=".$dbHostPort."))
                (CONNECT_DATA=(SERVICE_NAME=".$dbServiceName.")))";
    
    
    if(!$dbConn = oci_connect($usr,$pswd,$dbConnStr)){
    $err = oci_error();
    trigger_error('Could not establish a connection: ' . $err['message'], E_USER_ERROR);
    };
    
    $strSQL = "SELECT SYSDATE FROM DUAL";
    
    $stmt = oci_parse($dbConn,$strSQL);
    if ( ! oci_execute($stmt) ){
    $err = oci_error($stmt);
    trigger_error('Query failed: ' . $err['message'], E_USER_ERROR);
    };
    
    while(oci_fetch($stmt)){
        $rslt = oci_result($stmt, 1); print "<h3>query returned: ".$rslt."</h3>";
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      PDO 抽象层可用于连接到 Oracle DB 并在其上执行操作。这是来自 Oracle 网站的article,关于如何将 PDO 与 Oracle 一起使用。

      也可以使用OCI

      Oracle PHP Development Centre 将提供更多有关同时使用 Oracle 和 PHP 的有用信息。

      【讨论】:

        【解决方案3】:

        使用oci-interface连接oracle数据库应该没有问题,例如使用“oci_connect()”。

        更多示例如下: http://php.net/manual/en/oci8.setup.php

        但我不明白,MAC OS X 这句话是什么意思 - 你是在本地运行 apache 吗?

        希望这会有所帮助, 巴斯蒂安

        【讨论】:

        • 那将是 Apple 的操作系统 10 (Mac OS X)
        【解决方案4】:

        我不知道具体的Mac,也不知道PHP,但是你通常需要安装Oracle 客户端工具(Instant Client)。

        http://www.oracle.com/technology/tech/oci/instantclient/index.html

        安装后,您修改 TNSNAMES.ORA 文件以指向 Oracle 数据库的服务器和实例名称。

        然后你可以使用 PHP “数据库连接”的东西(对不起)来创建一个连接并运行你的 SQL 语句。

        使用 SQL*PLUS 客户端检查连接是否正常:

        即。

        c:> SQLPLUS
        
        CONNECT scott/tiger@mydatabase
        

        如果 TNSNAMES.ORA 正确,您应该获得连接,或者至少“用户名/密码不正确”证明您已与 Oracle 实例通信。

        如果您收到 TNS-12521 (?) 错误,则您的 TNSNAMES.ORA 不正确。

        【讨论】:

          【解决方案5】:

          我认为 OCI 将是可行的方法。 PHP 有一个module

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-04-17
            • 1970-01-01
            • 2014-03-18
            • 1970-01-01
            • 2017-05-18
            相关资源
            最近更新 更多