MySQLi命令不同步,具有简单的query()函数

时间:2015-01-01 13:30:40

标签: php mysql mysqli

我无法弄清楚为什么我会收到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);

}

非常感谢帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

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

问题是,无论何时调用存储过程,它都会输出一个在任何地方定义的结果。因此,如果你的过程返回1个值,php将得到2.最后一个只是告诉你没有更多的值。但是你必须处理那个以释放连接(在我的例子中$conn)。

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

$conn->next_result();

你有它。它现在可以完美地运行。