【问题标题】:pdo_oci driver not found but is listed in available drivers未找到 pdo_oci 驱动程序,但在可用驱动程序中列出
【发布时间】:2014-09-23 16:08:12
【问题描述】:

我正在尝试使用 php 中的 PDO_OCI 从远程 Ubuntu 14.04 服务器连接到在 Windows 上运行的 Oracle Database 11g XE。我遵循本指南http://gist.github.com/tassoevan/10392954(无数次)并不断收到以下错误:

找不到驱动程序

但是,当我调用 PDO::getAvailableDrivers() 时,它给了我这个:

数组([0] => mysql [1] => oci [2] => sqlite)

注意:在我按照上面链接中的指南进行操作之前,oci 不存在。

我能找到的所有其他教程基本上都是一样的。

我安装了 Oracle 即时客户端(版本 11.1)。最新版本甚至没有让驱动程序出现在可用驱动程序列表中。

我还知道,此方法中使用的驱动程序较旧,但没有关于如何使其与最新驱动程序一起使用的分步指南。我是 Oracle 数据库和 php 的新手,非常感谢您提供逐步帮助。

更新: 我发现了驱动程序的问题。它在我的 php 代码中,而且非常愚蠢。我发帖是为了他人的利益。

我的原始代码在设置连接时用大写字母“OCI”。

$tns = "  
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = myIP)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
    )
  )
       ";

try{
$pdo = new PDO('OCI:dbname='.$tns ,'username','password'); // Capital 'OCI' here is WRONG so changed to 'oci:dbname='
} catch(PDOException $e){
    echo $e->getMessage();
}

print_r(PDO::getAvailableDrivers());

但是,我在查询数据库时遇到问题。似乎什么都没有发生。我已允许 Windows 防火墙中的端口 1521 用于传入和传出。有什么建议吗?

这是我的 php 代码:

$stmt = $pdo->prepare("SELECT * FROM `PDO`;");
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result;

PDO 表只有一列一行。

Oracle 数据库是否需要配置为允许远程连接?

【问题讨论】:

  • 向我们展示您尝试连接到数据库并设置 PDO 的代码。
  • 感谢 Brad,您的要求让我仔细查看了代码。我“解决了”驱动程序错误,但现在我不知道它为什么不查询数据库。见上文。
  • 遗憾的是,PDO 默认不会抛出异常。使用 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 并查看您的 try/catch 块是否被触发。
  • 添加 setAttribute() 后没有任何变化。我在 pdo 查询之前和之后添加了一些回显语句,而在查询之后从未出现过。所以我认为它可能在查询本身或其执行中?
  • 试试var_dump($e);...一些异常没有消息(但这很少见)。更有可能的是,您的 PHP 错误日志中有一些有用的信息。

标签: php pdo oracle11g oracle-call-interface


【解决方案1】:

我的 PHP 代码有两个问题。 1) PDO 连接的启动方式不正确......请参阅原始帖子中的更新。这解决了我的驱动问题。

2) 与 MySQL 不同,Oracle 似乎不喜欢反引号字符。所以我不得不从我的查询中删除它们看起来像这样

$stmt = $pdo->prepare("SELECT * FROM PDO"); // Originally was SELECT * FROM `PDO`
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result; 

这解决了我的数据库查询问题。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2014-03-19
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2017-05-18
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多