Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO Oracle不适用于多个语句_Php_Oracle_Pdo - Fatal编程技术网

PHP PDO Oracle不适用于多个语句

PHP 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->

我在下面的代码中使用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->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;');