mysqli_prepare()查询在localhost上工作,但在上传时没有,在预准备语句上的变量

时间:2015-05-31 23:21:33

标签: php mysql mysqli prepared-statement

感谢您花时间阅读我的帖子并希望回答我的问题。

我目前正在为客户的网站制作物品库存清单的登录系统。

我在测试登录表单时一直在线收到这些错误:

  

警告: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()参数中所述。

谢谢!

1 个答案:

答案 0 :(得分:0)

不要转义你的字符串并用问号(?)替换变量名'$ username'和'$ password'。另外,请勿使用单引号。

作为安全预防措施,我还建议使用password_hash功能,因为您似乎可能将密码存储为纯文本。