Ric*_*ros 8 php mysql oracle pdo oracle11g
我想默认使用 php 通过 PDO 连接 oracle bd 中的 oracle Schema 数据库,但它向我抛出此错误:
致命错误:未捕获的 PDOException:SQLSTATE[42S02]:pdo_oci_handle_factory:ORA-12154:TNS:无法解析 C:\xampp\htdocs\ORACLE\52conexion3.php 中指定的连接标识符 (ext\pdo_oci\oci_driver.c:640) :9 堆栈跟踪:#0 C:\xampp\htdocs\ORACLE\52conexion3.php(9): PDO->__construct('oci:host=localh...', 'hr', 'hr') #1 { main} 在第 9 行的 C:\xampp\htdocs\ORACLE\52conexion3.php 中抛出
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php
$base = new PDO('oci:host=localhost/XE; dbname= Schema - HR', 'hr','hr');
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在连接中的 sql 开发人员中,“shema”的 bd 在哪里,我右键单击以查看属性,并且我输入的数据是正确的,它显示连接名称:架构 - 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');
Run Code Online (Sandbox Code Playgroud)
我检查了 .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]])
如PHP 手册页所述,并在 mario 的评论中提到, OCI 的 PDO DSN在其定义中使用dbname
, not schema
or host
:
$conn = new PDO('oci:dbname=localhost/XE', $user, $pass);
Run Code Online (Sandbox Code Playgroud)
localhost/XE
您使用的格式是“ EZCONNECT ”字符串。第一部分定义主机 (localhost),第二部分定义服务 (XE)。
您还可以使用“常规”连接字符串(通常在tnsnames.ora
文件中定义):
$conn_string = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))';
$conn = new PDO('oci:dbname=' . $conn_string, $user, $pass);
Run Code Online (Sandbox Code Playgroud)