感谢您花时间阅读我的帖子并希望回答我的问题。
我目前正在为客户的网站制作物品库存清单的登录系统。
我在测试登录表单时一直在线收到这些错误:
警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:变量数量与/home/greyan/public_html/shoplogin/login.php中预准备语句中的参数数量不匹配第44行
致命错误:在第48行的/home/greyan/public_html/shoplogin/login.php中调用未定义的方法mysqli_stmt :: get_result()
让我感到困扰的是,这只发生在我在网络服务器上在线上传时,而不是在我通过localhost查看网站时。
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = trim($str);
global $conn;
return $conn->real_escape_string($str);
}
//Sanitize the POST values
$username = clean($_POST['username']);
$password = clean($_POST['password']);
//Input Validations
if($username == '') {
$errmsg_arr[] = '*Username missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = '*Password missing';
$errflag = true;
}
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: index.php");
exit();
}
$sql = $conn->prepare("SELECT * FROM users WHERE username = '$username' AND password = '$password' ") ;
$sql->bind_param("ss", $username, $password) ;
$sql->execute();
$result = $sql->get_result();
我真的很困惑为什么这些错误会继续发生。准备好的语句中的变量数似乎是正确的,如bind_param()参数中所述。
谢谢!
答案 0 :(得分:0)
不要转义你的字符串并用问号(?)替换变量名'$ username'和'$ password'。另外,请勿使用单引号。
作为安全预防措施,我还建议使用password_hash功能,因为您似乎可能将密码存储为纯文本。