1
$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;
}
4

2 回答 2

6

使用EXISTS

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

如果没有找到符合条件的行,您的原始查询将返回“无行”。这个每次都返回TRUE( 1) 或FALSE( 0)。

在可能有多行匹配条件并且您只关心是否存在至少一行的情况下,性能EXISTS优于普通查询。一旦找到第一行,它就可以停止并且只返回0or 1

db<>fiddle here
sqlfiddle

于 2012-12-09T04:37:01.100 回答
3

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

$num_rows = mysql_num_rows($result);

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

//rows returned
}

对应的mysqli实现见mysqli_stmt_num_rows()

于 2012-12-09T04:47:08.127 回答