Php mysqli更新准备未捕获异常

Php mysqli更新准备未捕获异常,php,for-loop,mysqli,Php,For Loop,Mysqli,//$update行工作正常,但prepared语句抛出以下错误: 致命错误:未捕获异常“mysqli\u sql\u exception”并显示消息 '您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第5行的“WHERE weekday=?”附近 for($i=0;$iquery(“updatestorehours SET open='$open[$i]',open_2='$open_2[$i]',close='$close[$i]',close_2='$

//$update行工作正常,但prepared语句抛出以下错误:

致命错误:未捕获异常“mysqli\u sql\u exception”并显示消息 '您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第5行的“WHERE weekday=?”附近

for($i=0;$i<$count;$i++){//更新所有时间字段
//$update=$mysqli->query(“updatestorehours SET open='$open[$i]',open_2='$open_2[$i]',close='$close[$i]',close_2='$close_2[$i]'WHERE weekday='$weekday[$i]'”;
mysqli_报告(mysqli_报告全部);
$stmt=$mysqli->prepare(“更新maxfoo SET open=?”?,
开_2=?,
关闭=?,
关闭_2=?,
其中,工作日=?”;
$stmt->bind_参数(“SSS”,
$open[$i],
$open_2[$i],
$close[$i],
$close_2[$i],
$weekday[$i]);
$stmt->execute();
$stmt->close();
}

除非我不允许使用循环,否则代码对我来说似乎很完美?我不确定语法错误是什么。

在开始
WHERE…

$stmt = $mysqli->prepare("UPDATE maxfoo SET open = ?,
                   open_2 = ?,
                   close = ?,
                   close_2 = ?
                   WHERE weekday = ?");

bind_param部分的逗号呢?这是不同的,您需要它来分隔传递给
bind_param()
的参数。实际上,不要从bind stmt中删除逗号,因为您的SQL语句中有语法错误,而不是在修复它的PHP CodeTool中,奇怪的是,我的许多其他更新命令都有这个逗号,而且运行得很好,这是为什么?@AlbertD在
前面有一个逗号,其中…
将导致查询错误,每次都不要在循环中准备语句,否则你就否定了准备语句的性能优势。。。。在循环之前准备它,并且只绑定循环中的参数
$stmt = $mysqli->prepare("UPDATE maxfoo SET open = ?,
                   open_2 = ?,
                   close = ?,
                   close_2 = ?
                   WHERE weekday = ?");