在 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 时显示“连接”