我正在尝试使用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数据库配置为允许远程连接?
答案 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;
这解决了我的数据库查询问题。