Prepared Statements Select with Variables - php


Prepared Statements Select with Variables - php

试图通过num_rows=1设置一些东西来验证username=password。

尝试使用事先准备好的语句,这是我以前从未使用过的,我错过了一些东西。bind_results('s',$variable)中的var来自哪里??

此外,它只是对我不起作用。

<?php
require ($_SERVER['DOCUMENT_ROOT'].'/db-connect.php');
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$user = $_POST['username'];
//$user = $mysqli->real_escape_string($user);//
$password = $_POST['password'];
//$password = $mysqli->real_escape_string($password);//
if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) {
    $stmt->bind_result('ss', $username);
    $stmt->execute();
    $result = $stmt->num_rows;
    echo $result;
    $stmt->close();
}
$mysqli->close();
?>

我看到了三个问题:

$stmt->bind_result('ss', $username);

首先,bind_result PHP文档:

"将结果集中的列绑定到变量。"

我想你在找bind_param。PHP文档:

"为传递给mysqli_prepare()的SQL语句中的参数标记绑定变量。"

其次,您的语句有两个参数标记(?),绑定语句指示两个字符串(ss),但只提供一个变量($username)。

第三,$username不是你从$_POST['username']得到的。您已将其分配给$user$username用于数据库连接。

我认为它应该适用于你的这条线:

$stmt->bind_param('ss', $user, $password);