2012-12-09 50 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()