【发布时间】:2018-02-06 22:52:52
【问题描述】:
代码:
public function login($email , $password){
$stmt =$this->pdo->prepare("SELECT 'user_id' FROM 'users' WHERE 'email' = :email AND 'password' =: password");
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);
$stmt->execute();
$users = $stmt->fetch(PDO::FETCH_OBJ);
$count = $stmt->rowCount();
if($count > 0) {
$_SESSION['user_id'] = $user->user_id;
header('Location : home.php');
}else {
return false;
}
}
}
错误:
注意:在第 18 行的 C:\xampp8\htdocs\social\core\classes\user.php 中,只能通过引用传递变量
警告:PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match the number of tokens in C:\xampp8\htdocs\social\core\classes\user.php 上线19
【问题讨论】:
-
您的代码在太多级别上失败了。
-
不要使用
md5()进行密码散列。 这是非常不安全的。请改用 PHP 的password_hash()和password_verify()。如果您运行的 PHP 版本低于 5.5(我真的希望您不是),您可以使用 password_compat library 来获得相同的功能。 -
我几乎不敢为此提交答案。
-
@FunkFortyNiner - 在我意识到这是一个比最初看起来更深的兔子洞之前,我开始写一条新评论并做出一些解释。
-
@MagnusEriksson 我会碰碰运气的。