注意:我知道预准备语句是一种更安全的方法。我的最终代码始终使用预准备语句,但这是我工作流的最后一步,因为预准备语句可能更难调试。
我从 php 向数据库发送查询的方法是:
<?php
include_once 'dbh.inc.php';
$sql = "<sql statement goes here>";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
echo "<error message goes here>";
} else {
mysqli_stmt_execute($stmt);
}
?>
我已经测试过它,它适用于大多数有效的sql命令。
然后,在开发过程中,它返回了错误消息。我将 sql 命令更改为已知良好的命令,它再次工作正常。所以我使用echo $sql;
将损坏的命令回显到浏览器中,选择它,将其复制到 phpMyAdmin,它完全按照我想要的方式执行。
更新产品集保留 = 20600,其中产品 = 'product1'; 更新产品集保留 = 1600,其中产品 = 'product2';
返回的执行mysqli_stmt_error($stmt)
:
您的 SQL 语法有误;请查看手册 对应于您的MariaDB服务器版本,以便使用正确的语法 靠近"更新产品集保留 = 1600,其中产品 = 第 1 行的"产品 2">
为什么当它通过phpMyAdmin工作时,它不能通过上面的方法工作?
涉及mysqli_stmt_init()
、mysqli_stmt_prepare()
和mysqli_stmt_execute()
的进程一次只能执行一个命令。 phpMyAdmin可以一次执行多个命令。语句中给出的命令实际上是两个,用";"分隔。这就是phpMyAdmin能够运行它的原因。