$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;
}
使用 EXISTS
:
SELECT EXISTS (SELECT 1 FROM users WHERE onduty = 1 AND loc_id = '{$site}') AS test;
如果未找到与条件匹配的行,则原始查询将返回"无行"。这个每次都返回TRUE
(1
)或FALSE
(0
)。
如果可以有多个行与条件匹配,并且您只对是否存在至少一行感兴趣,则EXISTS
的性能优于普通查询。一旦找到第一行,它就可以停止,并且只返回0
或1
。
db<>fiddle here
旧 sqlfiddle
使用 mysql_num_rows() 检查执行查询时返回的行数。
$num_rows = mysql_num_rows($result);
if($num_rows==0)
{
//nothing returned
}
else
{
//rows returned
}
有关相应的 mysqli 实现,请参见 mysqli_stmt_num_rows()