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

Patricia Arquette
发布: 2024-11-21 07:32:11
原创
601 人浏览过

Why Do I Get

PHP 命令不同步:解决多个预准备语句使用中的错误

在 PHP 中,当尝试使用 MySQLi 执行多个预准备语句时,您可能会遇到错误“命令不同步,您现在无法运行该命令。”此错误的发生是由于 MySQLi 对查询结果集的默认处理。

导致此错误的一个潜在原因是执行查询时使用 MYSQLI_USE_RESULT。此模式通过避免缓冲整个结果集来优化性能。但是,它要求您使用 mysqli_free_result() 手动释放结果。如果在执行后续语句之前未能这样做,命令序列将变得不同步。

要解决此问题,请确保在从每个语句中获取所有行后调用 mysqli_free_result()。或者,您可以使用 store_result() 方法将整个结果集存储在内存中,以便您稍后访问它,而不必担心潜在的冲突。

此错误的另一个常见原因是存在来自以下位置的待处理结果:之前的查询。在循环内执行多个查询时,请确保在处理每个结果集后调用 mysqli_next_result()。此方法释放任何剩余结果并为后续查询准备连接。

以下是如何通过调用 mysqli_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();
$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);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($privileges);
$stmt1->fetch();
登录后复制

通过正确处理结果集并在不需要时释放它们,可以避免“命令不同步”错误并确保多个准备好的无缝执行声明。

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

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