【问题标题】:Testing a SQL Query for True or False测试 SQL 查询的真假
【发布时间】:2012-12-09 04:31:44
【问题描述】:
$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;
}

【问题讨论】:

标签: php mysql sql


【解决方案1】:

使用EXISTS:

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

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

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

db小提琴here
sqlfiddle

【讨论】:

  • 如果我用你的 SQL 查询替换了我的 SQL 查询,我是否仍然执行 `$result = mysql_query($sql);` 并且 $result 是真还是假?
  • @KickingLettuce:是的,或者更确切地说,1 代表TRUE0 代表FALSE,正如 MySQL 所说的那样。
  • 我实际上得到的是Resource id #16,而不是真或假。
  • 您仍然会从查询中收到一个 mysql 资源。您需要从资源中获取第一个结果。但是你可以保证总会有一个结果,而不是一个空的结果集。使用mysql_result 从资源中获取结果。
  • 抱歉耽搁了。我用了你的答案。只需要弄清楚它周围的 PHP 逻辑。将更新上面的问题。
【解决方案2】:

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

$num_rows = mysql_num_rows($result);

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

//rows returned
}

对应的mysqli实现见mysqli_stmt_num_rows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2017-09-30
    • 2015-07-02
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多