Prepare Statement 没有 fetching/binding 任何结果。 PHP

Prepare Statement not fetching/binding any result. PHP

我想使用 prepare 语句进行此查询,但不知何故它没有获取任何数据。我在表单中输入的用户名在数据库中,我想问题一定出在 prepare stmt 的某个地方。

if(isset($_POST['login'])){

    $typed_username = mysqli_real_escape_string($connection, $_POST['login_username']);
    $typed_password = $_POST['login_password'];

    $column        = "username";

    $stmt = mysqli_prepare($connection, "SELECT user_password FROM users WHERE ? = ?");
    mysqli_stmt_bind_param($stmt, "ss", $column, $typed_username);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $user_password);

    if(mysqli_stmt_num_rows($stmt) < 1){
        echo "no results";
    }

    if(password_verify($typed_password, $user_password)){

        echo "login yeah!";

    }
}

无论我尝试什么,我都会得到 "no results"。

虽然我已经添加了关于如何解决这个问题的评论,但我想为了您的学习目的,我应该在此处添加解决方案。

如果 $column = "username"; 永远不变,这将成为一个非常简单的解决方案。

如果是这样;你必须改变你的准备:
$stmt = mysqli_prepare($connection, "SELECT user_password FROM users WHERE ? = ?");
对此:
$stmt = mysqli_prepare($connection, "SELECT user_password FROM users WHERE username = ?");

更改之后,您不再需要绑定 $column(mysql 说绑定列无论如何都是无意义的,因为它不会接受它。) 因此,您的 bind_param 更改自:
mysqli_stmt_bind_param($stmt, "ss", $column, $typed_username);
为此(您不再需要 myqsli_real_escape_string 因此您可以将 $_POST 直接放入查询中:
mysqli_stmt_bind_param($stmt, "s", $_POST['login_username']);

因此,您的整体代码现在如下所示:

 if(isset($_POST['login'])){

    $typed_password = $_POST['login_password'];

    $stmt = mysqli_prepare($connection, "SELECT user_password FROM users WHERE username = ?");
    mysqli_stmt_bind_param($stmt, "s", $_POST['login_username']);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $user_password);
    //you where missing fetch
    mysqli_stmt_fetch($stmt);

    //store the result
    mysqli_stmt_store_result($stmt);
    //now we can use mysqli_stmt_num_rows
    if(mysqli_stmt_num_rows($stmt) < 1){
        echo "no results";
    }
    //added an else here as I said in the comments
    else if(password_verify($typed_password, $user_password)){

        echo "login yeah!";

    }
}