首页  >  文章  >  数据库  >  PHP MySQLi'命令不同步”:如何修复错误?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-22 10:38:12478浏览

PHP MySQLi

PHP 命令不同步:解决困境

当使用 PHP 和 MySQLi 从 MySQL 数据库检索数据时,执行多个准备好的语句有时会导致错误,“命令不同步,您无法运行该命令现在。”

原因和解决方案

当连接对象($mysqli)有先前查询的待处理结果时,会发生此错误。要解决这个问题,您需要在每个准备好的语句之后调用 $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();
$stmt->close();

while ($mysqli->more_results()) {
    $mysqli->next_result();
}

$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
$stmt1->bind_param('s', $user_id);
// This is where the error occurs
$stmt1->execute();

在此代码中,错误将是执行第二条语句($stmt1)时抛出。要修复此问题,请在执行 $stmt1 之前添加以下行:

$mysqli->next_result();

其他提示

  • 确保始终调用 free_result() 并 close( ) 在每次查询执行后在 $stmt 对象上。
  • 为每个查询使用单独的 $stmt 对象如果可能的话,准备好的语句。
  • 如果即使在尝试上述解决方案后仍遇到错误,请考虑使用 mysqli::more_results() 和 mysqli::next_result() 检查缓冲区中剩余的任何待处理结果。

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

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