在 PHP MySQL 搜索中未找到结果时显示消息

Posted

技术标签:

【中文标题】在 PHP MySQL 搜索中未找到结果时显示消息【英文标题】:Displaying message when no results found in PHP MySQL search 【发布时间】: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);


?>

【问题讨论】:

【参考方案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';

【讨论】:

以上是关于在 PHP MySQL 搜索中未找到结果时显示消息的主要内容,如果未能解决你的问题,请参考以下文章

如果单击按钮时显示警告消息,则不显示更新的搜索结果列表

AJAX Live Search是一种PHP搜索表单,类似于谷歌自动完成功能,可以在键入时显示结果。

使用 NextJS 在 getServerSideProps 中没有可用数据时显示 div?

当用户登录时显示“注销”按钮,当他不使用 PHP/MySQL 时显示“连接”

iOS:如何在另一个表格视图中显示搜索结果?以及如何在搜索时显示建议?

使用 UISearchDisplayController 时显示搜索结果崩溃