Php mysqli_stmt::bind_result():绑定变量的数量与prepared语句中的字段数量不匹配

Php mysqli_stmt::bind_result():绑定变量的数量与prepared语句中的字段数量不匹配,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我一直在尝试使用一条准备好的语句在PHP中编写登录表单,但每次尝试登录时都会出现以下错误: mysqli_stmt::bind_result:绑定变量的数量与prepared语句中的字段数量不匹配 这是我的密码: <?php session_start(); $mysqli = new mysqli("localhost", "root" , "" , "security"); if(mysqli_connect_errno()){ echo "Wrong" ; } if($st

我一直在尝试使用一条准备好的语句在PHP中编写登录表单,但每次尝试登录时都会出现以下错误:

mysqli_stmt::bind_result:绑定变量的数量与prepared语句中的字段数量不匹配

这是我的密码:

<?php
session_start();

$mysqli = new mysqli("localhost", "root" , "" , "security");
if(mysqli_connect_errno()){
    echo "Wrong" ;
}
if($stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username =? AND password =?")){
    $username = $_POST['name'];
    $password = $_POST['password'];
    $stmt->bind_param('ss' ,$username ,$password);
    $stmt->execute();
    $stmt->bind_result($password ,$username);
    if($stmt->fetch() == 'true')
    {
        echo "welcome";
    } else{
        echo "wrong password";
    }
}
?>

有人能告诉我为什么会发生这种情况吗?

如果这确实是您的代码,那么可能是$\u POST[name]或$\u POST[password]是一个数组,因此bind\u param绑定的不仅仅是一个值

检查:

var_dump($_POST["name"]);
var_dump($_POST["password"]);
您的选择语法错误,正确的语法是 从表中选择field1、field2、field3,其中field1=?字段2=

要选择更多字段,只需用逗号分隔,而不是用and分隔


另外,我意识到你在明文中保存你的密码,这是不好的做法,考虑使用散列函数散列它们,比如Sh1

你绑定了3个参数,在你的查询中只有两个。通常情况下,当你有查询选择*并且在表中添加或删除字段时。使用altertable。
$mysqli->prepare("SELECT username, password FROM users WHERE username = ? AND password = ?");
$username = $_POST['name'];
$password = $_POST['password'];
$stmt->bind_param('ss' ,$username ,$password);
$stmt->execute();
$stmt->bind_result($username ,$password);