You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP与Oracle数据库连接失败求助:含TNS配置及调试报错

PHP连接Oracle数据库失败求助

我正在开发一款PHP Web应用,但对Oracle数据库并不熟悉。已获取数据库的TNS条目如下:

DBNAME =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxxx.com)(PORT = 1530))
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxxx.com)(PORT = 1530))
    (LOAD_BALANCE = yes)
    (FAILOVER = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbname)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 25)
        (DELAY = 5)
      )
    )
  )

同时拿到的JDBC连接串:jdbc:oracle:thin@//xxxxxxxxxxx.com:1530/dbname

我尝试了以下PDO连接代码,但未能成功:

<?php error_reporting(E_ALL); ?>

<?php
class PDOConnection {
    private $db;

    function _construct(){
    try{
        $server = 'xxxxxxxxxxx.com';
        $username = "xxxxx";
        $password = "xxxxx";
        $service_name = "dbname";
        $sid = '';
        $port = 1530;

        $dbCon ="DBNAME =
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxxx.com)(PORT = 1530))
        (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxxx.com)(PORT = 1530))
        (LOAD_BALANCE = yes)
        (FAILOVER = yes)
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = dbname)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = BASIC)
            (RETRIES = 25)
            (DELAY = 5)
          )
        )
      )";
      $this->db = new PDO("oci:dbname=" . $dbCon."; charset=utf8", $username, $password,[ 
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
      ]);
      echo "Connected";
    } catch(PDOException $e){
        echo $e->getMessage();
    }

    }
}
$obj = new PDOConnection();
?>

还尝试了以下代码片段:

<?PHP
$oci_user = "xxxxx";
$oci_psw = "xxxxx";
$oci_sid = "sid";
$db_charset = 'utf-8'
?>

做了大量研究,但仍无法建立连接,恳请协助解决PHP与Oracle数据库的连接问题。


调试信息

dbConn.php文件:

<?php

class dbConn
{

    private $db;       //数据库句柄
    public  $num_rows; //行数
    public  $last_id;  //最后插入ID
    public  $aff_rows; //受影响行数
    private $stid;     //解析后的命令

    public function __construct($dbuser, $dbpassword, $db_connection)
    {
        $this->db = oci_connect ($dbuser, $dbpassword, $db_connection);
        if (!$this->db) {
            $e = oci_error();
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
        }
    }

    public function close()
    {
        oci_close($this->db);
    }

    public function execute($sql)
    {
        $this->stid = oci_parse ($this->db, $sql);
        $rst = oci_execute ($this->stid);
        $rows=array();
        $this->aff_rows = 0;
        if ($rst){
            $this->aff_rows= oci_fetch_all ($this->stid, $rows);
        }
        oci_free_statement($this->stid);
        return $rows;
    }
}
?>

test.php文件:

<?php include 'dbConn.php'; 
$connstr= "DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx.com)(PORT = 1530))
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx.com)(PORT = 1530))
(LOAD_BALANCE = yes)
(FAILOVER = yes)
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = xxxxx)
  (FAILOVER_MODE =
    (TYPE = SELECT)
    (METHOD = BASIC)
    (RETRIES = 25)
    (DELAY = 5)
  )
)
)";

$mydb = new dbConn ($username, $userpassw, $connstr);
?>

报错信息:

Warning: Undefined variable $username in test.php on line 19

Warning: Undefined variable $userpassw in test.php on line 19

Fatal error: Uncaught Error: Call to undefined function oci_connect() in dbConn.php:14 Stack trace: #0 
test.php(19): dbConn->__construct(NULL, NULL, 'DESCRIPTION =\r\n...') #1 {main} thrown in dbConn.php on line 14

内容的提问来源于stack exchange,提问作者webapp471

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:35:19