准备好的语句选择变量-php

准备好的语句选择变量-php,php,mysqli,Php,Mysqli,试图通过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); i

试图通过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\u结果

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

我想您正在寻找
bind\u param

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

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

第三,
$username
不是您从
$\u POST['username']
获得的。您已将其分配给
$user
<代码>$username用于数据库连接

我认为这句话应该适合你:

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

你好不要在bind_result函数中使用硬编码字符串。始终使用变量。在您的情况下:$sString=“ss”$stmt->bind_结果($sString,$username);好的,谢谢,我会的。你可以查看这个链接,你的问题有很多答案,请使用PHP来处理密码安全问题。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
@JayBlanchard至少不需要mysql弃用/删除或SQL注入警告。:)谢谢,我在想bind函数是在把一些东西绑定到一个新变量,这就是为什么我在那里有一个不同的变量!我建议浏览我链接的PHP文档中的一些示例。他们可以帮助您在开始时了解它是如何工作的。虽然,说实话,我真正建议的是使用pdo而不是mysqli,因为我认为它使使用准备好的语句更容易。不过,这只是我的意见。