MySQLi prepare语句给出了空白响应

时间:2013-05-30 03:37:10

标签: 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 ['用户名'](或行中的任何数据)?

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

2 个答案:

答案 0 :(得分: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);

}

您可以参考documentation

答案 1 :(得分: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=?

并且对bind的调用应该是:

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