2012-11-27 21 views
0

你好每一個我試圖爲我的網站做一個登錄方法,我有一個小問題。我從PDO連接中獲取數據,但每次檢查密碼時都會返回false。我的變量是否錯誤? 這裏是我的sql查詢我如何使用PDO結果?

$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是個問題。任何人都可以糾正我嗎?

謝謝

回答

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->的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*/} 
+0

好吧,我會嘗試它。非常感謝 –

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 
} 
+0

確定我會嘗試。非常感謝 –

+0

在查詢詳細記錄以匹配日誌之後檢查行數是我最經常使用的一種方式,應該足夠有效用於您的目的,並記住您是否需要使用此服務器以實時服務器將您的密碼從純文本文本。 :) – kabuto178

+0

我嘗試了所有的方式,但沒有工作。我改變取fetchAll什麼都沒有,我再次改變了FETCH_OBJ到FETCH_ASSOC。我打印了$ this-> result->密碼並列舉了空的! –