【发布时间】:2018-05-10 02:55:21
【问题描述】:
我想默认通过 PDO 与 php 连接 oracle bd 中的 oracle Schema 数据库,但它抛出了这个错误:
致命错误:未捕获的 PDOException:SQLSTATE[42S02]: pdo_oci_handle_factory: ORA-12154: TNS: 无法解析连接 在中指定的标识符 (ext\pdo_oci\oci_driver.c:640) C:\xampp\htdocs\ORACLE\52conexion3.php:9 堆栈跟踪:#0 C:\xampp\htdocs\ORACLE\52conexion3.php(9): PDO->__construct('oci:host=localh...', 'hr', 'hr') #1 {main} 投入 C:\xampp\htdocs\ORACLE\52conexion3.php 第 9 行
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$base = new PDO('oci:host=localhost/XE; dbname= Schema - HR', 'hr','hr');
?>
</body>
</html>
在连接中的 sql developer 中,“shema”的 bd 在哪里,我右键单击查看属性并且我输入的数据是正确的,它显示连接名称:Schema - HR ,用户:hr,密码:hr,网络别名:XE。
其他尝试但仍然无效:
$base = new PDO('oci:host=localhost;dbname=Schema - HR', 'hr','hr');
$base = new PDO("oci:host=localhost;dbname=Schema - HR", "hr","hr");
$base = new PDO("oci:host=localhost/XE;dbname=Schema - HR", "hr","hr");
$base = new PDO("oci:host=XE;dbname=Schema - HR", "hr","hr");
$base = new PDO('oci:host=localhost;dbname="Schema - HR"', 'hr','hr');
我检查了 .ini 文件,它显然是正确的“extension = php_pdo_oci.dll”。
注意:我搜索了 php 手册,当我没有与 pdo 连接但通过程序我以这种方式(使用 oci_connect)进行连接时,它可以正常工作:
$connection = oci_connect('hr', 'hr', 'localhost/XE');
// oci_connect: 资源oci_connect(string$username,string$password[,string$connection_string[,string$character_set[,int$session_mode]])
【问题讨论】:
-
猜测 - 它不喜欢数据库名称中的空格。
-
我尝试使用其他数据库(名称不带空格“prueba”但也不起作用:/
-
这个“localhost/XE”语法是什么?
host应该是主机名,应该是(DNS)可解析的名称;它不应包含斜杠。 -
我在一个论坛上看到他们是这样说的,但我尝试了很多方法(见帖子末尾)。
-
不确定 PDO Oracle 驱动程序是否专门处理/拆分主机名:github.com/php/php-src/blob/master/ext/pdo_oci/… - 但手册说它属于
dbname=参数:php.net/manual/en/ref.pdo-oci.connection.php
标签: php mysql oracle pdo oracle11g