0

みなさん、こんにちは。自分のWebサイトのログイン方法を実行しようとしていますが、小さな問題が発生しています。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)){

エラーは発生しません。常にfalseを返します。私はまだパスワードを暗号化していないので、この問題はありません。$ 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 に答える