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
相关产品推荐
相关产品推荐

