PHP MySQLi'命令不同步”错误:如何修复?

Barbara Streisand
发布: 2024-11-18 10:03:02
原创
919 人浏览过

PHP MySQLi

PHP 命令不同步错误:理解和解决方法

在 PHP/MySQLi 中执行多个准备好的语句时,可能会遇到“命令不同步”错误。这是由于执行的语句数量和正在处理的结果数量之间不匹配造成的。要解决此问题,请考虑以下见解和解决方案:

错误原因

当 MySQL 客户端收到的数据多于特定语句的预期时,就会出现“不同步”错误。当使用带有 MYSQLI_USE_RESULT 标志的 mysqli::query 时会发生这种情况。该标志指示 MySQL 不要完全缓冲结果,从而导致后续命令不同步。

代码片段说明

在您提供的代码中,使用两个准备好的语句从数据库。第一个语句检索用户信息,而第二个语句检索权限。但是,您在执行第二条语句时遇到了错误。

解决方案

要解决该错误,您必须在执行第二条语句之前释放第一条语句的结果。这是通过调用 mysqli_stmt->free_result() 函数来实现的。此外,在每个查询后调用 mysqli->next_result() 可确保处理任何其他结果。

以下是如何解决该问题的示例:

    $stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $loweredEmail);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $mysqli->next_result(); // Ensure no stray results are present

    $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
    $stmt1->bind_param('s', $user_id);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($privileges);
    $stmt1->fetch();
登录后复制

其他提示

  • 为每个准备好的语句使用单独的对象以避免混乱。
  • 使用 mysqli_stmt->error 执行语句后始终检查错误。
  • 除非必要,否则避免使用 MYSQLI_USE_RESULT,因为它可能导致同步问题。

以上是PHP MySQLi'命令不同步”错误:如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板