0

大家好,我正在尝试为我的网站做一个登录方法,但我遇到了一个小问题。我从 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->password 是问题所在。谁能纠正我?

谢谢你

4

2 回答 2

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');

$this->result->execute();

然后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*/}
于 2012-11-27T02:57:39.693 回答
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
}
于 2012-11-27T02:47:10.367 回答