在SQL While循环中找不到行时回显某些内容


Echo something when no rows are found in SQL While loop

我有一个while循环,它遍历sql数据库中的所有行。在循环内部,我打印该行的内容,但是当查询返回0行时,不会执行该循环内部的代码。当找不到行时,我如何让它运行一些代码?

示例:

$qry = mysql_query("SELECT .......etc");
while ( $row1 = mysql_fetch_array($qry)) {
     if (empty($row1)) {
          echo "Nothing found";
     } else {
           echo "Found something";
      }
} 

我遇到的问题是,当while什么都不返回时,if根本不执行。

编辑:我知道我应该使用mysqli或类似的

首先,您应该停止使用mysql_函数,因为它们是去复杂的,并开始使用mysqli_函数、MySQLi类或PDO

为了回答您的问题,有一个mysql_num_rows函数,它返回语句返回的行数:

$stmt = mysql_query("SELECT .......etc");
if (!mysql_num_rows($stmt)) {
    echo "Nothing found";
} else {
    while (/*...*/) {
    }
}

有关详细信息,请参阅:http://php.net/manual/en/mysqli-result.num-rows.php

$qry = mysql_query("SELECT .......etc");
if (mysqli_num_rows($qry) === 0) {
      echo "Nothing found";
} else {
    while ( $row1 = mysql_fetch_array($qry)) {
        echo "Found something";
    } 
}

它会多次回显"Foundsomething",每行回显一次。如果你不想这样,你也必须把它移到while循环之外。

问题是,如果没有返回结果,则根本不会执行循环。

考虑使用显式标志,这样代码更容易阅读:

<?php
$qry = mysql_query("SELECT .......etc");
$resultWasEmpty = true;
while ($row = mysql_fetch_array($qry)) {
    $resultWasEmpty = false;
    // do whatever you want to do with $row
} 
if ($resultWasEmpty) {
    echo "Nothing found";
}

或者,您可以简单地使用返回结果集中的行数的函数:mysql_num_rows($qry)。。。


除此之外,一般警告

您正在使用旧的、过时的和不推荐使用的mysql扩展。您真的应该切换到当前的mysqli扩展或PDO包。

使用mysql_num_rows函数。

$qry = mysql_query("SELECT .......etc");
if( mysql_num_rows($qry) > 0 ) {
    while ( $row1 = mysql_fetch_array($qry)) {
        // do something with the record
    }
} else {
    // no record found in database
}

PHP 7不再支持p.S.mysql_*扩展。您应该考虑使用mysqli_*

$qry = mysql_query("SELECT .......etc");
if(mysql_num_rows($qry)>0){
   while ( $row1 = mysql_fetch_array($qry)) {
      echo " found";
   } 
}else{ 
   echo "Nothing found";
}