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

标签 php mysql mysqli

我不明白为什么我的命令不同步;您现在无法运行此命令 错误。我似乎找不到解决此问题的方法。

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

这是我的代码:

$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 个值,php 将得到 2 个。最后一个只是告诉您没有更多的值。但是您还必须处理该连接以释放连接(在我的示例中为 $conn)。

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

$conn->next_result();

就是这样。它现在可以完美地工作。

关于php - MySQLi 命令不同步,使用简单的 query() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731236/

相关文章:

javascript - jQuery 函数在存在多个目标时停止工作,但在只有一个目标时工作

php - 使用php对数据库表中的特定行进行计算

mysql - 从 RDBMS (MySQL) 迁移到 Solr 时的架构注意事项

javascript - 从 Javascript GPS 代码插入数据库

php - 锁定 innodb 行并获取实时版本

php - MYSQL 和 PHP while 循环在输出之前检查上一行和下一行

php - 代表同一类别中的独特项目

php - Laravel - 从 Controller 调用模型查找错误的文件名

php - MySQL SSH 控制台正确运行子查询,但 mysqli 为子查询列返回零

java - Java 找不到 PHP 脚本,但可以在浏览器中运行