【问题标题】:Could not connect to Oracle using PDO无法使用 PDO 连接到 Oracle
【发布时间】:2014-06-07 23:58:36
【问题描述】:

我有这些 sn-ps,但我仍然无法连接到我的 Oracle 数据库。我相信我做的一切都是正确的,但我不知道陷阱在哪里。

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

【问题讨论】:

  • @EduardoVerdugoCáceres 现在它的说法是,SQLSTATE[42S02]: pdo_oci_handle_factory: ORA-12154: TNS:could not resolve the connect identifier specified (ext\pdo_oci\oci_driver.c:635)
  • 查看我的回答以了解您已安装的驱动程序并且没有错误消息??

标签: php oracle pdo


【解决方案1】:

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

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

如果oci没有显示,则需要安装它(http://php.net/manual/en/ref.pdo-oci.php

【讨论】:

  • oci 确实显示了,但问题是我仍然收到此错误。 pdo_oci_handle_factory: ORA-12521: TNS:listener does not currently know of instance requested in connect descriptor (ext\pdo_oci\oci_driver.c:635)怎么办?
【解决方案2】:

看线:
$dbh = new PDO('OCI:dbname='.$dataBaseName.'charset=UTF-8', $user,$pass);
您已在大写字母中使用 OCI 将其替换为“oci”(小写字母)
(我自己犯的一个错误)
一旦您从 php.ini 更改了以下行的取消注释就足够了:
extension=php_pdo_oci.dll

【讨论】:

    【解决方案3】:

    按照以下说明解决了我的问题 http://lacot.org/blog/2009/11/03/ubuntu-php5-oci8-and-pdo_oci-the-perfect-install.html

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

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

      array(
                  'name' => 'PDO Oracle extension',
                  'mandatory' => false,
                  'condition' => extension_loaded('pdo_oci'),
                  'by' => 'All DB-related classes',
                  'memo' => 'Required for Oracle database.',
      ),
      
    3. 在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',
      ];
      

    【讨论】:

      猜你喜欢
      • 2015-05-14
      • 2022-01-18
      • 2017-12-06
      • 1970-01-01
      • 2015-05-19
      • 2014-01-28
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多