0

我正在尝试通过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);不会显示任何其他错误。

4

2 回答 2

1

您只是从表中选择passwordid从表中选择,因此当您获取数据时,您将无法获得username

一般语法是

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);

}

你可以参考文档

于 2013-05-30T03:50:34.200 回答
0

您正在尝试打印用户名字段,但查询的选择部分仅检索 id 和密码字段。与 mysqli_get_result() 或类似函数不同,mysqli_stmt_fetch() 仅返回成功或失败的布尔值,输出传递给 mysqli_stmt_bind_result() 函数中分配给它的变量。添加 $username 作为该函数的第三个参数并将用户名添加到选择查询的末尾将在调用 fetch() 后使用用户的用户名填充 $username 变量。

为了澄清,您的查询应该是:

SELECT id, password,username FROM `members` WHERE id=? AND password=?

并且对绑定的调用应该是:

mysqli_stmt_bind_result($stmt, $cookie_id, $cookie_pass, $username);
于 2013-05-30T03:49:30.937 回答