【发布时间】:2017-07-14 17:10:21
【问题描述】:
我在以下代码中使用 PDO 在一个执行和 fetchall 中运行多个语句。这适用于 Microsoft SQL Server,但不适用于 Oracle。
<?php
$conn = new PDO("odbc:oratest", "SYSTEM", "password");
$result = $conn->prepare("select * from all_objects; select * from all_users;");
$result->execute();
echo "<html><body>";
do
{
echo "<table border=\"0\">";
$row = $result->fetchAll(PDO::FETCH_ASSOC);
if($row && count($row) > 0) {
$keys = array_keys($row[0]);
echo "<tr>";
for($j = 0; $j < count($keys); $j++) {
echo "<td>" . $keys[$j] . "</td>";
}
echo "</tr>";
for($i = 0; $i < count($row); $i++) {
echo "<tr>";
for($j = 0; $j < count($keys); $j++) {
echo "<td>" . $row[$i][$keys[$j]] . "</td>";
}
echo "</tr>";
}
}
echo "</table>";
} while($result->nextRowset());
echo "</body></html>";
?>
使用 OCI PHP 方式的其他代码也不能使用多个语句:
$stid = oci_parse($conn, 'select * from all_objects; select * from all_users;');
oci_parse 只是失败,说它不理解分号字符。
有没有办法在连接到最新Oracle XE的PHP中同时运行多个语句。
这个问题与现有的 MySQL 问题不同,因为这个问题是关于 Oracle 的,它是一个具有不同功能和限制的不同驱动程序。
【问题讨论】:
-
让你的代码吐出错误
-
fetchAll 返回零数组没有数据没有错误。
-
Oracle SQL Developer 是如何做到的?
-
只是好奇,用单独的调用运行查询有什么问题?为什么您认为有必要将脚本中的每个查询都填充到单个 blob 中,然后针对数据库触发它?
-
另一个原因是他们可能会编写一个他们想在 PL/SQL 中发送的脚本,这将是一堆需要一起运行的语句。