2012-07-03 43 views
2

我想在數據庫中匹配一個用戶名。如果用戶名匹配,則返回true,否則返回false。PDO計數用戶名匹配的行

目前即使用戶名正確,它也會一直返回false。

這裏是類和呼叫我使用:

class register{ 
    private $result; 

    public function __construct($post_data, PDO $dbh){ 

    $this->post_data = array_map('trim', $post_data); 
    $this->dbh = $dbh; 

    } 

    public function checkUsername(){ 
    $stmt = $this->dbh->prepare("COUNT(*) FROM oopforum_users WHERE username = ?"); 
    $stmt->bindParam(1, $this->post_data['reg_username'], PDO::PARAM_STR); 
    $stmt->execute(); 
    $this->result = $stmt->rowCount(); 
    if($this->result == 0){ 
     return false; 
    }else{ 
     return true; 
    } 
    } 

} 


$register = new register($_POST, $dbh); 
if($register->checkUsername()){ 
    //continue 
}else{ 
    echo 'ERROR: That username is taken, please choose another one.'; 
} 

爲什麼返回false,即使用戶名的確實匹配?

+0

當你var_dump($ this-> result);'? –

回答

4

你忘了SELECT聲明:

$stmt = $this->dbh->prepare("SELECT COUNT(*) FROM oopforum_users WHERE username = ?"); 

除此之外,您的查詢將總是返回一行(正好是1行),但該行的內容可以爲行計數包含0,所以你需要改變你的邏輯:選擇一個真實的列而不是COUNT(*),並使用$stmt->rowCount()或讀取計數值並檢查。

+0

非常感謝 – crm

+1

@crm:爲了將來的參考,啓用PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION使PDO在錯誤上引發異常。這將使你更容易發現錯誤。 –

+0

仍然努力去理解這個..我嘗試過'SELECT username'和'$ stmt-> fetchColumn',但是這返回false。 – crm