首页 >后端开发 >php教程 >为什么在 PHP 和 MySQL 查询中出现'命令不同步”错误?

为什么在 PHP 和 MySQL 查询中出现'命令不同步”错误?

Susan Sarandon
Susan Sarandon原创
2024-12-19 21:28:16183浏览

Why Do I Get a

PHP 代码与 MySQL 查询中的“命令不同步”错误

使用 mysqli 执行涉及多个 MySQL 查询的 PHP 脚本时,可能会出现错误:“命令不同步;您现在无法运行此命令。”当在获取和处理前一个查询的结果或清除 MySQL 服务器的查询命令缓存之前尝试后续查询时,就会出现此问题。

问题中提供的代码执行两个查询:一个用于计算记录,另一个用于计算记录。根据搜索字符串检索行。但是,在获取第一个查询的结果之前,会执行第二个查询。这会触发“不同步”错误。

错误原因

  • 无缓冲查询: MySQLI 默认使用无缓冲查询对于准备好的语句,这意味着结果将在可用时分部分进行流式传输。如果在缓冲第一个查询结果之前尝试后续查询,命令可能会不同步并导致错误。
  • 不完整的查询执行:当尝试多个查询而没有正确处理结果,不完整的命令可能会累积在服务器的缓存中。这可能会中断后续查询并导致错误。

可能的解决方案

  • 缓冲区结果:要避免此错误,在执行下一个查询之前,使用 $stmt->store_result() 缓冲查询结果。使用 $stmt->fetch() 获取缓冲的结果,然后使用 $stmt->free_result() 清除服务器的缓存。
  • 获取第一个查询结果: 或者,获取所有将第一个查询的结果放入数组中。这会消耗结果并允许执行后续查询,而不会受到未获取结果的干扰。
  • 使用事务:如果多个查询相关并且必须顺序执行,请考虑使用事务来处理该过程作为单个原子

示例

下面是使用 $stmt->store_result() 缓冲第一个查询结果的示例:

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
$con->query("SET NAMES 'utf8'");
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
}

以上是为什么在 PHP 和 MySQL 查询中出现'命令不同步”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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