【问题标题】:Displaying message when no results found in PHP MySQL search在 PHP MySQL 搜索中未找到结果时显示消息
【发布时间】:2011-09-22 17:24:51
【问题描述】:

我有一个查询 MySQL 数据库的 PHP 搜索脚本。目前,当没有结果显示时,脚本会显示错误。当没有返回任何内容时,如何让它显示类似“未找到结果”的消息?

我的 PHP 脚本是:

<?php

mysql_connect("localhost","username","password");
mysql_select_db("database");

if(!empty($_GET['q'])){
$query=mysql_real_escape_string(trim($_GET['q']));
$searchSQL="SELECT * FROM links WHERE `title` LIKE '%{$query}%'  LIMIT 8";
$searchResult=mysql_query($searchSQL);

while ($row=mysql_fetch_assoc($searchResult)){
    $results[]="<div class='webresult'><div class='title'><a href='{$row['url']}'>{$row['title']}</a></div><div class='desc'>{$row['description']}</div><div class='url'>{$row['url']}</div></div>";
}

echo implode($results);
}

?>

【问题讨论】:

    标签: php mysql html sql


    【解决方案1】:
    if (empty($results)) { 
        echo 'No results found'; 
    } else {
        echo implode($results);
    }
    

    【讨论】:

    • 这无论如何都会失败,因为此时会运行 while 循环,并且会发出错误。
    • 这对我很有用! ..谢谢。 @Shef,while循环转到上面出现echo的地方,在if语句之前不对其进行评估。在发表评论之前,您至少应该先对其进行测试。如果您确实对其进行了测试,但没有成功,那么我有兴趣了解您的新情况。
    【解决方案2】:

    创建一个 MYSQL 连接并将这段代码粘贴到下面

    $sql="SELECT * FROM tablename WHERE columnname LIKE your variable or constant ";
    $result=mysql_query($sql);
    
    $count=mysql_num_rows($result);
    
    if($count>=1){if result was found}
    
    else {if result was not found}
    
    ?>
    

    【讨论】:

      【解决方案3】:

      您可以计算数组中元素的数量,然后继续您的内爆或显示您提到的消息。

      <?php
           if(count($results) > 0){
               echo implode($results);
           }
           else {
               echo "No results were found.";
           }
      ?>
      

      你也不应该使用 mysql_* 函数。使用改进版本 (mysqli_*) 或 PDO。

      【讨论】:

        【解决方案4】:

        尝试以下方法:

        <?php
        
        mysql_connect("localhost","username","password");
        mysql_select_db("database");
        
        if(!empty($_GET['q'])){
        $query=mysql_real_escape_string(trim($_GET['q']));
        $searchSQL="SELECT * FROM links WHERE `title` LIKE '%{$query}%'  LIMIT 8";
        $searchResult=mysql_query($searchSQL);
        
        if(mysql_num_rows($searchResult) <= 0)
        {
            echo "No results";
        } else {
        
            while ($row=mysql_fetch_assoc($searchResult)){
                $results[]="<div class='webresult'><div class='title'><a href='{$row['url']}'>{$row['title']}</a></div><div class='desc'>{$row['description']}</div><div class='url'>{$row['url']}</div></div>";
            }
        
            echo implode($results);
        } 
        }
        
        ?>
        

        另外请使用 MySQLi 或 PDO,因为它更安全、更好用,一些信息可以在下面找到。我个人更喜欢 MySQLi,但 PDO 中的预处理语句非常好,每次查询时都可以节省一些代码行;)

        MySQLi and PHP

        PDO and PHP

        【讨论】:

        • 这将在最后一行出现错误。在括号之间移动echo implode($results)
        【解决方案5】:
        <?php
        
        mysql_connect("localhost","username","password");
        mysql_select_db("database");
        
        if(!empty($_GET['q'])){
            $query          =   mysql_real_escape_string(trim($_GET['q']));
            $searchSQL      =   "SELECT * FROM links WHERE `title` LIKE '%{$query}%'  LIMIT 8";
            $searchResult   =   mysql_query($searchSQL);
        
            // the query was run successfully 
            // and it returned at least a result
            if(is_resource($searchResult) && mysql_num_rows($result) > 0){
                while ($row=mysql_fetch_assoc($searchResult)){
                    $results[]="<div class='webresult'><div class='title'><a href='{$row['url']}'>{$row['title']}</a></div><div class='desc'>{$row['description']}</div><div class='url'>{$row['url']}</div></div>";
                }
        
                echo implode($results);
            } else{
                echo 'No Results were found';
            }
        }
        ?>
        

        【讨论】:

          【解决方案6】:

          您也可以使用函数mysql_num_rows,它会告诉您查询返回的行数。

          $rows = mysql_num_rows($searchResult);
          if($rows <= 0){
              /* Code if there are no rows */
          }
          else{
              /* At least one row has been found */
          }
          

          【讨论】:

            【解决方案7】:
            if (mysql_num_rows($searchResult) == 0) {
               echo "some error message"; 
            } else { 
              ... process data
            }
            

            【讨论】:

              【解决方案8】:

              while 语句中的简单计数器怎么样:

              $i = 0;
              
              while (condition) {
                 $i++;
                 do stuff;
              }
              
              if ($i ==0) {echo 'No results found';}
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-12-25
                • 1970-01-01
                • 1970-01-01
                • 2012-05-31
                相关资源
                最近更新 更多