【问题标题】:What is the usefulness of checking num_rows before while loop after SELECT query?在 SELECT 查询之后的 while 循环之前检查 num_rows 有什么用处?
【发布时间】:2012-03-23 00:17:15
【问题描述】:

在许多脚本中,程序员在运行相应的while循环之前检查SELECT查询是否返回了任何记录

$result=mysql_query("SELECT * From table WHERE column='XX'");
if(mysql_num_rows($result)>0) {
    while($row=mysql_fetch_array($result)){
    ...
    }
}

这个检查是必要的还是有用的?因为当不返回任何记录时,while循环不会循环。检查返回的行数可以提高性能吗?

【问题讨论】:

    标签: php mysql sql while-loop


    【解决方案1】:

    您通常会在没有返回任何行的情况下这样做,并且您只是想为用户打印一条好消息。如果您只有一个 while 循环,则需要保留一个计数器,这可能会变得很丑。

    所以它主要是为了

    else {
      echo "No results found!";
    }
    

    ;)

    【讨论】:

    • 我理解你描述的情况,但是在很多情况下,num_rows 只覆盖了没有else 的while 循环;这让我想知道!
    • 对,但更符合原始问题,如果您不打算产生这样的消息,那么在 while 循环之前使用条件是否有任何意义?
    • @ali。正如您必须知道的那样,许多编码人员仅在业余级别使用 php。如此多的做法很常见,没有充分的理由。
    • 当我开发绑定数据库的应用程序时,我喜欢记录查询的所有可能结果。所以在查询之后,我通常首先检查错误,然后检查返回的结果,然后开始迭代。并在每种情况下返回不同的返回代码和日志消息。它只是使代码更易于理解和跟踪(例如,您可以使用 grep 查找所有返回 0 结果的查询的日志)。
    • 好吧,如果您不需要对零行计数采取行动,我就不会费心进行检查。无论它是否对性能造成影响...可能,但很可能微不足道。
    【解决方案2】:

    对于程序员来说,很明显如果没有返回行,WHILE 循环中的代码将不会被执行。这是一个常见的结构,因此无需进一步说明。因此,除非有分支,否则IF 不是必需的。

    1. 根据敏捷原则,我们不应该仅仅因为我们以后可能需要它而输入代码。
    2. 我们应该尽可能简化代码。

    所以,考虑到两个不把冗余代码放进去的理由,我想不出有什么理由把它放在那里。

    好:

    $result=mysql_query("SELECT * From table WHERE column='XX'");
    if(mysql_num_rows($result)>0) {
        while($row=mysql_fetch_array($result)){
          ...
        }
    } else {
      // Do something
    }
    

    好:

    $result=mysql_query("SELECT * From table WHERE column='XX'");
    while($row=mysql_fetch_array($result)){
        ...
    }
    

    不好:

    $result=mysql_query("SELECT * From table WHERE column='XX'");
    if(mysql_num_rows($result)>0) {
        while($row=mysql_fetch_array($result)){
            ...
        }
    }
    

    【讨论】:

    • 你甚至可以做if(rows == 0) { printError(); } /*(else)*/ while(($row = fetch()) !== FALSE) { … }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2014-09-04
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多