2012-12-09 49 views
0
$sql = "SELECT # FROM users WHERE onduty = 1 AND loc_id = '{$site}';"; 
$result = mysql_query($sql); 

我只是想測試這是真是假。如果返回0行,我想下一行是這樣的:測試SQL查詢的真或假

if (!$result) { //do this; } 

然而,在我的測試中,我越來越假,當我知道這應該是真實的。這聽起來有道理嗎?

(注意,是的,我知道我應該使用mysqli_query,這不是什麼我問這裏)**

答: 這是我用什麼:

$login_state = false; 
if(mysql_num_rows(mysql_query("SELECT 1 FROM users WHERE onduty = 1 AND loc_id = '{$site}';"))) { 
    $login_state = true; 
} 
+0

爲什麼'{$網站} ';「'??看起來應該是'{$}網站'」; ' –

+0

** Heads up!** PHP的未來版本是*棄用和刪除mysql_'系列函數。現在將是[切換到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli)的好時機。 – Charles

+0

@NullPointer,我不在乎網址縮寫和一些片段使用的措辭,否則我會。 – Charles

回答

5

使用EXISTS

"SELECT EXISTS (SELECT 1 FROM users WHERE onduty = 1 AND loc_id = '{$site}');" 

如果找不到符合條件的行,您的原始查詢將返回「無行」。每次都返回TRUE1)或FALSE0)。

More about EXISTS in the manual.

在情況下,可以有多個行匹配的標準和你只感興趣的至少一個行中是否存在,的EXISTS性能優於普通的查詢。只要找到第一行,它就會停止,只返回01

->sqlfiddle demo.

+0

如果我用你所擁有的SQL查詢取代了我的SQL查詢,我仍然執行'$ result = mysql_query($ sql); '和$結果可能是真或假? – KickingLettuce

+0

@KickingLettuce:是的,或者更確切地說'1'代表'TRUE','0'代表'FALSE',就像MySQL所說的那樣。 –

+0

我實際上獲得'資源id#16'而不是真或假。 – KickingLettuce

3

使用mysql_num_rows()查詢返回的行數上執行查詢。

$num_rows = mysql_num_rows($result); 

if($num_rows==0) 
{ 
//nothing returned 
} 
else 
{ 

//rows returned 
} 

對於與mysqli的實現,請參閱mysqli_stmt_num_rows()