2012-02-22 161 views
4

我在這個類中有這個函數或方法,但是當我插入一個電子郵件時它不返回行數。我測試了mysql連接等,他們都工作。還要注意,我通過該方法傳遞的電子郵件已經存在於數據庫中。我的計劃是獲得行數,如果它大於零,這意味着我們已經在數據庫中有這個電子郵件。檢查數據庫中是否存在電子郵件?

public function userExist($email) { 
    $query = "SELECT email FROM " . USER_TABLE . " WHERE email = ?"; 

    $stmt = $this->_db->prepare($query); 

    $stmt->bind_param("s", $email); 

    if ($stmt->execute()) { 
     $stmt->store_result(); 
     return $stmt->num_rows; 
    } 
     return false; 


} 
+1

只要它始終等於'$ email',您就不需要'選擇電子郵件'。更好地執行'SELECT COUNT(*)' – zerkms 2012-02-22 20:42:45

+0

所有*似乎都很好。 'display_errors'設置爲true,或者記錄錯誤? – Josh 2012-02-22 20:48:56

+0

我不熟悉OOP的調試方式,這是我的主要問題,通過編程OOP方式讓我感到沮喪。我使用eclipse來完成編碼,並使編碼變得更容易,但我需要學習如何調試。你知道一個好的調試工具或源代碼的PHP? – 2012-02-22 21:02:39

回答

1
public function userExist($email) { 
$query = "SELECT COUNT(*) AS num_rows FROM " . USER_TABLE . " WHERE email = ?"; 

$stmt = $this->_db->prepare($query); 

$stmt->bind_param("s", $email); 

if ($stmt->execute()) { 
    $stmt->store_result(); 
    return $stmt->num_rows; 
} 
    return false; 


} 

你去那裏,通知SELECT COUNT(*) AS num_rows(我用NUM_ROWS所以你不會有改變你的代碼,這可以是任何東西,只要你引用它像$stmt->VAR_NAME執行查詢後)。

2

我不知道如何使用PDO與mysqli的,但你想要做的是檢查是否存在的條目用mysql EXISTS功能,比獲取結果(這是百達1或0)。

SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = ?) as email_exists 

在上面的查詢,email_exists將是1或0,這取決於閹羊的電子郵件已經是表中或沒有。

隨着PDO我會做這樣的:

$sth = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = :email)"); 
$sth->execute(array('email' => $email)); 
return $sth->fetchColumn(); 

我會讓你知道如何給自己用自己的類來完成它。

+0

感謝您的黑客,但我寧願知道,這是什麼,我搞砸了,不返回mysqli數行... – 2012-02-22 20:50:16

相關問題