Php 无法使用PDO连接到Oracle

Php 无法使用PDO连接到Oracle,php,oracle,pdo,Php,Oracle,Pdo,我有这些代码片段,但仍然无法连接到Oracle DB。我相信我做的每件事都是对的,但我不知道陷阱在哪里 try { $user='weltesadmin'; // Enter your DB User Name. $pass='weltespass'; // Enter your DB Password. $dataBaseName='weltes'; // Enter your Database Name. $dbh = new PDO('OCI:dbname=

我有这些代码片段,但仍然无法连接到Oracle DB。我相信我做的每件事都是对的,但我不知道陷阱在哪里

try {
    $user='weltesadmin'; // Enter your DB User Name.
    $pass='weltespass'; // Enter your DB Password.
    $dataBaseName='weltes'; // Enter your Database Name.
    $dbh = new PDO('OCI:dbname='.$dataBaseName.'charset=UTF-8', $user,$pass);
    echo "Connection Successful";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . " ";
    die();
}
php.ini上

extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pdo_sqlite_external.dll
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll

检查已安装的驱动程序,查看是否安装了
oci

foreach(PDO::getAvailableDrivers() as $driver)
    echo $driver, '\n';

如果未显示
oci
,则需要安装它()

按照

不要忘记导出oracle home。即使设置了oracle home,我也无法配置pdo_oci。所以给 导出ORACLE\u HOME=/opt/instantclient\u 10\u 2/ 在pdo_oci-1.0目录中运行配置之前

  • 启用上述扩展
  • 将此添加到requirements.php

    array(
                'name' => 'PDO Oracle extension',
                'mandatory' => false,
                'condition' => extension_loaded('pdo_oci'),
                'by' => 'All DB-related classes',
                'memo' => 'Required for Oracle database.',
    ),
    
  • 在db.php中编辑dsn,如下所示

    return [
            'class' => 'yii\db\Connection',
            'dsn'=> 'oci:dbname=(DESCRIPTION=(ADDRESS=(HOST=x.y.z.a)(PROTOCOL=tcp)(PORT=1525))(CONNECT_DATA=(SID=YOURSID)))',
            'username' => 'USER',
            'password' => 'PASS',
            'charset' => 'utf8',
    ];
    
  • 看看这句台词:
    $dbh=new-PDO('OCI:dbname='。$dataBaseName.charset=UTF-8',$user,$pass);
    您在caps中使用了OCI,并将其替换为“OCI”(小写)
    (我自己犯的一个错误)
    一旦您更改了php.ini下面行的取消注释就足够了:

    extension=php_pdo_oci.dll

    @EduardoVerdugoCáceres现在的说法是,SQLSTATE[42S02]:pdo_oci_handle_factory:ORA-12154:TNS:无法解析指定的连接标识符(ext\pdo_oci\oci driver.c:635)检查我的答案以了解您安装的驱动程序,没有错误消息??oci确实显示了,但问题是我仍然收到了这个错误<代码>pdo_oci_handle_工厂:ORA-12521:TNS:侦听器当前不知道在连接描述符(ext\pdo_oci\oci_driver.c:635)中请求的实例怎么办?