PHP:我的代码中有错误,主要是mysqli_fetch_assoc()需要参数mysqli_result,给定对象

PHP:我的代码中有错误,主要是mysqli_fetch_assoc()需要参数mysqli_result,给定对象,php,mysqli,Php,Mysqli,有人能帮我修改代码吗? 我试图访问一个密码哈希数据库,并使用它们来验证用户登录,但出现了几个错误 <?php $servername="localhost"; $username = "*****"; $password = "*******"; $dbname = "*****"; $conn = new mysqli($servername,$username,$password,$dbname); if($conn->connect_error){ die("Conne

有人能帮我修改代码吗? 我试图访问一个密码哈希数据库,并使用它们来验证用户登录,但出现了几个错误

<?php
$servername="localhost";
$username = "*****";
$password = "*******";
$dbname = "*****";
$conn = new mysqli($servername,$username,$password,$dbname);
if($conn->connect_error){
    die("Connection to database failed: ".$conn->connect_error);
}
$uname=mysqli_real_escape_string($conn, $_POST['entered_username']);
$pw=mysqli_real_escape_string($conn, $_POST['entered_password']);

$stmt=$conn->prepare("SELECT username,password,password_hash FROM users WHERE username=?");
$stmt->bind_param('s',$uname);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result);
$stmt->fetch();

if(!$stmt){
echo $conn->connect_error();}
if($stmt){
echo 'Connection successful';}

$found=FALSE;

while($row=mysqli_fetch_assoc($stmt))
{
    if($password_verify($pw,$row['password_hash'])) {
        $found=TRUE;
    }
}


if($found){
    echo "You have successfully logged in as ".$uname."!";
}
else {
    echo "Login as ".$uname." failed!";
}
$stmt->close();
$conn->close();
?>

我得到的输出:

警告:mysqli_stmt::bind_result():绑定变量的数量不正确 匹配中已准备语句中的字段数 /****/第27行的login3.php
连接成功
警告:mysqli_fetch_assoc()预期参数1为mysqli_结果, 第37行的/**/login3.php中给出的对象
以管理员身份登录失败


你把它弄混了。试试-

$stmt=$conn->prepare("SELECT username,password,password_hash FROM users WHERE username=?");
$stmt->bind_param('s',$uname);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result);


if(!$stmt){
echo $conn->connect_error();}
if($stmt){
echo 'Connection successful';}

$found=FALSE;

while($row=$stmt->fetch_assoc();)
{
    if($password_verify($pw,$row['password_hash'])) {
        $found=TRUE;
    }
}

您必须绑定列,因为它必须匹配需要:

看看这个:

<?php
$servername="localhost";
$username = "*****";
$password = "*******";
$dbname = "*****";
$conn = new mysqli($servername,$username,$password,$dbname);
if($conn->connect_error){
    die("Connection to database failed: ".$conn->connect_error);
}
$uname=mysqli_real_escape_string($conn, $_POST['entered_username']);
$pw=mysqli_real_escape_string($conn, $_POST['entered_password']);

$stmt=$conn->prepare("SELECT username,password,password_hash FROM users WHERE username=?");
$stmt->bind_param('s',$uname);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($username,$password,$password_hash);
$stmt->fetch();

if(!$stmt){
echo $conn->connect_error();}
if($stmt){
echo 'Connection successful';}

$found=FALSE;

while($row=mysqli_fetch_assoc($stmt))
{
    if($password_verify($pw,$password_hash)) {
        $found=TRUE;
    }
}


if($found){
    echo "You have successfully logged in as ".$uname."!";
}
else {
    echo "Login as ".$uname." failed!";
}
$stmt->close();
$conn->close();
?>

谢谢大家!现在可以了!我更改了bind_result语句并去掉了fetch语句。显然,mysqli_stmt类没有为其定义fetch_assoc()方法

$stmt=$conn->prepare("SELECT username,password_hash FROM users WHERE username=?");
$stmt->bind_param('s',$uname);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user,$password_hash);

$found=FALSE;

while($stmt->fetch())
{
    if(password_verify($pw,$password_hash)) {
        $found=TRUE;
    }
}