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();
好了。它现在可以正常工作了。
我不明白为什么我会收到 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();
好了。它现在可以正常工作了。