测试SQL查询的True或False

时间:2012-12-09 04:31:45

标签: php mysql sql

$sql = "SELECT # FROM users WHERE onduty = 1 AND loc_id = '{$site}';"; 
$result = mysql_query($sql);

我只想测试这是真还是假。如果它返回0行,我希望下一行是这样的:

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;
}

2 个答案:

答案 0 :(得分:5)

使用EXISTS

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

如果找不到符合条件的行,原始查询将返回“no row”。每次都会返回TRUE1)或FALSE0)。

More about EXISTS in the manual.

如果可以有多个符合条件的行,并且您只关心是否存在至少一行,则EXISTS的性能优于普通查询。它可以在找到第一行后立即停止,只返回01

->sqlfiddle demo.

答案 1 :(得分:3)

使用mysql_num_rows()检查执行查询时返回的行数。

$num_rows = mysql_num_rows($result);

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

//rows returned
}

对于相应的mysqli实现,请参阅mysqli_stmt_num_rows()