在 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();
以上是PHP MySQLi'命令不同步”错误:如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!