PHP PDO Oracle不适用于多个语句
我在下面的代码中使用PDO在一个excetute和fetchall中运行多个语句。这适用于Microsoft SQL Server,但不适用于OraclePHP PDO Oracle不适用于多个语句,php,oracle,pdo,Php,Oracle,Pdo,我在下面的代码中使用PDO在一个excetute和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->
<?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_解析无法表示它不理解分号字符
在连接到最新Oracle XE的PHP中,是否有某种方法可以在一个批处理中同时运行多个语句
这个问题与现有的MySQL问题不同,因为这个问题是关于Oracle的,Oracle是一个不同的驱动程序,具有不同的功能和限制。事实上,我很惊讶它能与Microsoft SQL Server一起工作。 PDO::prepare first参数是根据的SQL语句,而不是几个 在一个prepare中放置多个语句的能力对我来说是一个安全问题。即使应该尽可能避免,SQL查询的字符串也可能是在PHP中动态构建的。如果发生恶意攻击和未越界的输入,人们可以在数据库中的select和delete数据之后添加第二条语句 我还关心的是,如果表的结构不同,PHP如何在一次调用中处理两个SQL语句的结果。结果数组应该是什么样子
TL;DR:使用多个execute和fetchall或在单个SQL查询中检索所有数据,例如使用
UNION all
。使您的代码吐出错误没有错误fetchall返回零数组没有数据。Oracle SQL Developer是如何做的?只是好奇,使用单独调用运行查询有什么问题?为什么您认为有必要将脚本中的每个查询填充在一个blob中,然后针对数据库启动它?另一个原因是他们可能会编写一个脚本,希望以PL/SQL发送,这将是一组需要一起运行的语句。您的想法很有趣,但完全偏离了轨道,事实上是不正确的。PDO是否支持多查询语句,取决于底层实现。@YourCommonSense:没有“多查询语句”这样的东西。查询是SQL语句。因此,如果PDO文档说它将语句作为第一个参数,那么很明显它不支持同时使用多个语句。因此,根据规范,它不支持它。如果一个实现支持它,它就不遵守规范。如果你想要多个语句,那么就有一些特定的方法。例如在mysql中:。但是MySQL文档警告SQL注入和可能在字符串中添加恶意语句的人:。它还说,不支持在准备好的语句中使用多重语句。
@YourCommonSense我是这里唯一链接文档的人,你只是告诉我我错了,而没有证明它。所以我提供事实,你不需要:“分号是数据库系统中分隔每个SQL语句的标准方法,允许在对服务器的同一次调用中执行多个SQL语句。”这同样意味着具有多个分号的字符串意味着它是多个语句。医生说:一份声明。你读过吗?问题是你的链接和你的幻想与所问的问题无关,应该作为评论发布
$stid = oci_parse($conn, 'select * from all_objects; select * from all_users;');