2013-10-17 23 views
-4

我正在進行簡單登錄。一個邏輯是,如果用戶名不存在,那麼他們會收到一條錯誤消息,並將其重定向到註冊頁面。 但是,當我運行我的代碼時,我不斷收到上述錯誤,不管我輸入的用戶名是什麼,它仍然會返回true。mysqli_result類的對象無法轉換爲int並且所有條目返回true

$res = $mysqli->query("SELECT Count(`userID`) FROM `users` WHERE `UserName` = '$username'"); 
    if($res ==0){ 
     return false; 
    } 
    else 
     return true; 
} 

我控制數據庫,因爲我正在開發它,因此知道它是什麼用戶名。我的印象是,如果我在數據庫中輸入一個用戶名,count就是1,這樣就會返回true,同樣,如果我輸入的數據庫名稱不在數據庫中,則計數爲0,因此$ res會是假的?

+2

http://php.net/manual/mysqli.query.php#refsect1-mysqli.query-returnvalues – Phil

+0

您仍然需要從結果集中提取。閱讀手冊http://nl1.php.net/manual/en/mysqli.query.php – tlenss

回答

0

你仍然要算! mysqli :: query的返回值不是一個整數,它是一個結果對象。

if ($res->num_rows == 0) { 
    return false; 
} else { 
    return true; 
} 

它被認爲不是最好的編碼風格來創建返回值。

return ($res->num_rows > 0); // will be true if result is bigger than 0 

而這導致了一個問題:如果有兩行或更多行返回?

+0

謝謝Sven,我將它改爲Select * From'users' where'username' = $ username,從而確保我有一個結果行如果用戶輸入了數據庫中的用戶名。根據兩行或更多行的機會,我想到了這一點,並且我需要在登錄時擁有邏輯,以防止用戶使用數據庫中的用戶名註冊。最後感謝您指出應該編碼的正確方式。 – Steve73NI

0

這是可以做到這樣的:

return ($res && $res->num_rows >= 1) ; 
相關問題