大家好,我正在尝试为我的网站做一个登录方法,而且我遇到了一个小问题。我从PDO连接获取数据但每次检查密码时都返回false。我的变量是错的? 这是我的SQL查询
$this->result = $this->sql->prepare('SELECT username,password FROM User WHERE username=:username AND password=:password');
$this->result->bindParam(':username', $username, PDO::PARAM_STR);
$this->result->bindParam(':password', $password, PDO::PARAM_STR);
$this->result->execute();
这是我的if语句:
$this->result=$this->result->fetch(PDO::FETCH_OBJ);
if (($password == $this->result->password) && ($username == $this->result->username)){
我没有得到错误它只是总是假的。我不是在加密密码,所以不是这个问题。我认为$ this-> result->密码就是问题所在。有人能纠正我吗?
谢谢
答案 0 :(得分:2)
你也可以使用它:
$username=$_GET['username'];$password = $_GET['password'];/*of $_POST, depending of which you used*/
$this->result = $this->sql->prepare('SELECT username,password FROM User WHERE username='$username' AND password='$password');
$这 - > result->执行();
然后像这样使用fetchAll
:
$this->results = $this->result->fetchAll(PDO::FETCH_ASSOC);
if($this->results['username']==$this->username && $this->results['password']==$this->password){/*u had beed loged in*/}
答案 1 :(得分:0)
你的逻辑应该有效。最有可能的是,SQL没有返回任何内容。尝试打印出获取结果。
$this->result=$this->result->fetch(PDO::FETCH_OBJ);
print_r($this->result);
此外,如果要在SQL查询中检查用户名和密码,则不必在if语句中再次检查它。使用您正在使用的SQL语句,您应该能够检查它是否返回一行以验证用户。
$numrows = $this->result->rowCount();
if ($numrows == 1) {
// User is valid
}
else {
// User is not valid
}