首页 >后端开发 >php教程 >为什么我在 PHP 中使用 MySQL 准备语句时会出现'命令不同步”错误?

为什么我在 PHP 中使用 MySQL 准备语句时会出现'命令不同步”错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-23 07:57:48140浏览

Why Am I Getting a

命令不同步,MySQL 准备语句问题

您在尝试运行两个 MySQL 时遇到错误“命令不同步”使用 mysqli 和 PHP 进行查询。当正在进行多个无缓冲查询并且命令未按正确顺序执行时,会出现此错误。

在您的代码中,您准备了两个查询:$countQuery 和 $recordsQuery。但是,默认情况下,mysqli 对准备好的语句使用无缓冲查询。这意味着必须在执行下一个查询之前获取每个查询的结果。

错误原因

您的代码尝试在 $ 循环内执行 $recordsQuery计数查询。由于未获取 $countQuery 的结果,mysqli 将其视为无缓冲查询并继续无序执行 $recordsQuery。这会导致“命令不同步”错误。

解决方案

要解决此问题,您有两个选择:

  • 获取第一个查询的结果:使用以下命令将 $countQuery 的结果获取到数组中$numRecords->get_result()。这将缓冲结果并允许您随后执行 $recordsQuery。
  • 使用 mysqli store_result(): 或者,您可以在获取结果之前使用 $stmt->store_result() 方法。这将在内部缓冲结果,而不需要额外的数组。

store_result()的示例

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the query results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
    // Continue with your code...

注意:

如果您在 $recordsQuery 之前使用 $countQuery 来计算行数,请确保释放结果在执行 $recordsQuery 之前使用 $numRecords->free_result() 的 $countQuery。如果您使用 store_result,则不需要此操作。

以上是为什么我在 PHP 中使用 MySQL 准备语句时会出现'命令不同步”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn