从PHP连接到Oracle数据库

rjzwgtxy  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(147)

我正在尝试连接Oracle数据库。
由于某种原因,当我尝试以下代码时:

<?php
    include "header.php";
    // simply attempt to connect to the database
    /* If you are connecting to the Oracle database, the credentials are as follows: 
     * Username: ********
     * Password: ********
     * Hostname: **********
     * Port: 1521
     * Service name: ***********
    */
    $oracleConnect = true;
    if ($oracleConnect)
    {
        echo 'Attempting connection...<br>';
        $connection = null;
        try
        {
            $connection = oci_connect('user',
                'pass',
                'user@//hostname:1521/dbname');
        }
        catch (Exception $e)
        {
            echo $e->getMessage();
        }
        if (!$connection)
        {
            echo '<p>Something is wrong.</p>';
            $e = oci_error();
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
        }
        // if the connection has been established
        else
        {
            // tell the user and close it (this is a test)
            echo 'Connection established!!';
            oci_close($connection);
        }
    }
    else
    {
        $connection = new mysqli('host', 'user', 'password', 'database');
        echo ($connection) ? 'Database connection successful!' : 'Could not connect.';
    }
    include "footer.php";
?>

当我尝试上面的代码时,我得到了要打印的“尝试连接...”,但没有其他的。不管怎样,它应该打印别的东西。到底出了什么问题

afdcj2ne

afdcj2ne1#

我认为问题出在连接字符串的user@部分。我不认为这是必要的,因为oci_connect有一个用户名参数。我可能错了,我从来没有在php中使用过oracle,但是the docs on oci connections似乎也表明:
要使用Easy Connect命名方法,PHP必须与Oracle 10 g或更高版本的客户端库链接。Oracle 10 g的Easy Connect字符串的格式为:[//]host_name[:port][/service_name].在Oracle 11 g中,语法是:[//]host_name[:port][/service_name][:server_type][/instance_name].可以通过在数据库服务器计算机上运行Oracle实用程序lsnrctl status来查找服务名称。
另外,据我所知,oci_connect不会抛出异常,所以你的try/catch是无用的,除非你打算在它返回false时抛出自己的异常。

相关问题