找不到pdo_oci驱动程序但列在可用的驱动程序中

时间:2014-07-31 15:53:06

标签: php pdo oracle11g oci

我正在尝试使用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数据库配置为允许远程连接?

1 个答案:

答案 0 :(得分:0)

我的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; 

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