MySQLi 命令不同步,使用简单的 query() 函数

MySQLi Commands out of sync, with simple query() function

我不明白为什么我会收到 Commands out of sync; you can't run this command now 错误。我似乎找不到解决此问题的方法。

正如您从代码中可能看到的那样,我需要执行两个 SQL 语句。一个检查密码是否正确,另一个仅在前一个 returns 为真时运行,将所有用户数据存储在会话变量中。

这是我的代码:

$check_pw_query = $conn->query("CALL checkPassword('{$username}', '{$password}')");
$check_pw_fetched = $check_pw_query->fetch_assoc();
$check_pw_query->close();

if($check_pw_fetched['password_correct']) {

    unset($check_pw_fetched);

    if(!$get_user_data = $conn->query("CALL getUserData('{$username}')")/*->fetch_assoc()*/) {
        echo $conn->error;
    }

    $_SESSION["user_username"] = $username;
    $_SESSION["user_id"] = $get_user_data["id"];
    $_SESSION["user_name"] = $get_user_data["name"];
    $_SESSION["user_email"] = $get_user_data["email"];
    $_SESSION["user_type"] = $get_user_data["type"];

    $conn->close();
    unset($conn);
    send_home(false);

}

非常感谢您的帮助。

谢谢

好的,因为没有真正有用的答案,我会自己回答,希望能帮助其他遇到同样问题的人。

问题是,每当你调用一个存储过程时,它会多输出一个定义在任何地方的结果。所以如果你的程序 returns 1 个值,php 将得到 2 个。最后一个只是告诉你没有更多的值。但是您还必须处理那个问题以释放连接(在我的示例中为 $conn)。

因此,您要做的就是将其添加到您的代码中,就在 $check_pw_query->close(); 之后:

$conn->next_result();

好了。它现在可以正常工作了。