【问题标题】:mysqli update prepare Uncaught exceptionmysqli更新准备未捕获的异常
【发布时间】:2014-01-30 20:22:30
【问题描述】:

// $update 行工作正常,但是准备好的语句抛出这个错误:

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

for($i = 0; $i < $count; $i++){ //update all time fields 
//  $update = $mysqli->query("UPDATE storehours SET open='$open[$i]', open_2='$open_2[$i]', close='$close[$i]', close_2='$close_2[$i]' WHERE weekday ='$weekday[$i]'");

            mysqli_report(MYSQLI_REPORT_ALL);

            $stmt = $mysqli->prepare("UPDATE maxfoo SET open = ?,
                       open_2 = ?,
                       close = ?,
                       close_2 = ?,
                       WHERE weekday = ?");
                    $stmt->bind_param("sssss",
                       $open[$i],
                       $open_2[$i],
                       $close[$i],
                       $close_2[$i],
                       $weekday[$i]);
                    $stmt->execute();
                    $stmt->close();

        }

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

【问题讨论】:

  • 不要在循环内准备语句,否则你将否定准备好的语句的性能优势......在循环之前准备它,并且只在循环内绑定参数跨度>

标签: php for-loop mysqli


【解决方案1】:

在开始WHERE...之前需要去掉close_2 = ?,末尾的逗号

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

【讨论】:

  • bind_param 部分的逗号怎么样?
  • 不一样,你需要用它来分隔你传递给bind_param()的参数。
  • 不是真的,不要从 bind stmt 中删除逗号,因为您的 SQL 语句中存在语法错误,而不是您的 PHP 代码中
  • 很酷,修复了它,奇怪的是我的很多其他更新命令都有那个逗号,并且运行良好,这是为什么呢?
  • @AlbertD 在WHERE... 之前有一个逗号,每次都会导致查询错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2010-09-28
  • 2012-05-31
相关资源
最近更新 更多