我无法弄清楚为什么我会收到Commands out of sync; you can't run this command now
错误。我似乎找不到解决这个问题的方法。
正如您可以从代码中看到的那样,我需要执行两个SQL语句。一个用于检查密码是否正确,另一个(仅在前一个返回true时运行)将所有用户数据存储在会话变量中。
这是我的代码:
$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);
}
非常感谢帮助。
谢谢
答案 0 :(得分:0)
好的,因为没有真正有用的答案,我会自己回答,希望能帮助其他人解决同样的问题。
问题是,无论何时调用存储过程,它都会输出一个在任何地方定义的结果。因此,如果你的过程返回1个值,php将得到2.最后一个只是告诉你没有更多的值。但是你必须处理那个以释放连接(在我的例子中$conn
)。
因此,您只需在$check_pw_query->close();
之后将其添加到您的代码中:
$conn->next_result();
你有它。它现在可以完美地运行。