无法准备 SQL 语句 [重复]

Posted

技术标签:

【中文标题】无法准备 SQL 语句 [重复]【英文标题】:SQL Statement Cannot be Prepared [duplicate] 【发布时间】:2020-07-19 15:39:57 【问题描述】:

我目前正在做一个项目,在某个条件下,将 TableA 的内容汇总并插入到 TableB 中,然后将新的一行插入到 TableA 中。然而,我创建的语句似乎无法在 php 中准备好,尽管实际查询在 SQL 中运行良好。有人可以指导我如何解决这个问题吗?

$insert = "INSERT INTO DATABASE.TableB(ColumnB2, ColumnB3, ColumnB4, ColumnB5)
           SELECT DATE(MAX(ColumnA2)), MIN(ColumnA3), MAX(ColumnA3), AVG(ColumnA3) 
           FROM DATABASE.TableA
           ;

           DELETE 
           FROM DATABASE.TableA
           ;

           ALTER TABLE DATABASE.TableA AUTO_INCREMENT = 1
           ;

           INSERT INTO DATABASE.Current_Level(ColumnA2, ColumnA3)
           VALUES(CURRENT_TIMESTAMP, ?)
           ;";

$stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt, $insert))

    echo "Error";

else

    mysqli_stmt_bind_param($stmt, "d", $ColumnA2);
    mysqli_stmt_execute($stmt);

【问题讨论】:

错误信息?? echo "Error"; 几乎没用 但是echo $conn->error; 可能会给你一些你可以使用的东西 我刚刚检查了我的错误日志,它没有返回任何错误。我认为这是我编写它的方式的逻辑错误,但我不确定究竟是什么让它错了。对此感到抱歉 要在实时环境中从 PHP 中获取错误,请将这 4 行添加到要调试 ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 的任何基于 MYSQLI_ 的脚本的顶部。这将强制任何MYSQLI_ 错误生成一个您可以在浏览器上看到的异常以及正常的 PHP 错误。 不管怎样,你有答案,下面 【参考方案1】:

您不能为多个 SQL 语句创建准备好的语句。您需要为这些 SQL 语句中的每一个创建一个准备好的语句。每条 SQL 语句用分号分隔;

根据 PHP 文档:

不支持在准备好的语句中使用多语句。

https://www.php.net/manual/en/mysqli.quickstart.multiple-statement.php

【讨论】:

我明白了。那么我应该只准备一个然后使用 mysqli_query() 来运行其他的吗? @Sakuya No. 分别准备和执行。

以上是关于无法准备 SQL 语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

准备好的语句在本地主机上工作,但不能在实时服务器上工作,无法获得输出 [重复]

如何查看准备好的 PDO SQL 语句 [重复]

将 java.sql.Array 创建为整数数组以用于准备好的语句 [重复]

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

使用准备好的语句存储空值时 SQL 数据类型无效 [重复]

PHP在准备SQL语句时抛出致命错误[重复]