Php mysqli_stmt::bind_result():绑定变量的数量与prepared语句中的字段数量不匹配
我一直在尝试使用一条准备好的语句在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
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);