php - MySQLi 准备语句给出空白响应

标签 php mysql mysqli

我正在尝试通过 cookie 从信息中获取表行中的数据。

这是我到目前为止所拥有的:

    $cookie_id = @$_COOKIE['id'];
    $cookie_pass = @$_COOKIE['password'];

if ($_COOKIE['id']) {

    if ($stmt = mysqli_prepare($mysqli, "SELECT id, password FROM `members` WHERE id=? AND password=?")) {

        mysqli_stmt_bind_param($stmt, "ss", $cookie_id, $cookie_pass);

        mysqli_stmt_execute($stmt);

        mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass);

        $logged = mysqli_stmt_fetch($stmt);
        printf("USER ID: %s\n", $cookie_id);
        // prints "1"

        echo "Hello, " . $logged['username'] . "!";
    }
}

结果是:页面最顶部的USER ID: 1 Hello, !

我做错了什么?我正在尝试获取它,以便我可以从我尝试查找的表行中获取用户名。 如何根据密码和 ID 显示 $logged['username'](或行中的任何数据)?

并添加 error_reporting(E_ALL); 不会显示任何其他错误。

最佳答案

您只需从表中选择密码id,因此当您获取数据时,您将不会获得用户名

一般语法是

SELECT col1,col2, .... coln FROM `members` WHERE id=? AND password=?

您必须使用*来指定要选择的列

你的流程应该是这样的:

if ($stmt = mysqli_prepare($mysqli, "SELECT id, password , username FROM `members` WHERE id=? AND password=?")) {

    mysqli_stmt_bind_param($stmt, "ss", $cookie_id, $cookie_pass);

    mysqli_stmt_execute($stmt);

    mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass, $username);

    printf("Hello %s", $username);

}

您可以引用documentation

关于php - MySQLi 准备语句给出空白响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827522/

相关文章:

php - Codeigniter/PHP,2 个 Mysql 表,多个查询

php - Laravel - Eloquent 子查询选择独立于模型场景

javascript - 如何通过从数据库中检索值来在文本框中显示值?

mysql 不会从 cron 作业启动

mysql - 从 Laravel 5.1 升级到 Laravel 5.8 后,whereHas() 速度变慢

php - 想找出从 mysql 返回的结果总数

php - 在我的 WordPress 导航菜单中插入设计元素

php - 将 php 代码从 mysql 更新到 mysqli, undefined variable 但在构造函数中定义

php - MySQL Join 和 Echo 结果

php - 如何将 MySQLi 转换为准备好的语句?