【发布时间】:2017-04-28 22:54:23
【问题描述】:
所以我浏览了互联网并实际注册了这个网站,因为我发现我的大多数谷歌搜索都让我在这里。我几乎完成了我的网站制作,我使用了我扩展的模板。它上面有一个无法正常工作的搜索栏。我大部分时间都在工作。我遇到的问题是,当我输入 MySQL 的关键字时它工作正常,当我输入一个我知道不存在的唯一关键字时,它会给出正确的无结果响应。现在我的问题是,当您将 2 混合在一起时,它会导致数据库出错。这是我迄今为止整理的 php 代码...
<?php
$db = mysqli_connect('host','username','password')
or die('Error connecting to MySQL server.');
$keyword = $_GET['keyword'];
$terms = explode(" ", $keyword);
$query = "SELECT * FROM searchresults WHERE ";
foreach ($terms as $each) {
$i=0;
if ($i == 0)
$query .= "pagebody LIKE '%$each%' ";
else
$query .= " OR pagebody LIKE '%$each%' ";
}
mysqli_query($db, $query) or die('Error querying database.');
$result = mysqli_query($db, $query);
$row = mysqli_fetch_array($result);
if ($row > 0) {
while ($row = mysqli_fetch_array($result)) {
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$pagebody = $row['pagebody'];
$link = $row['link'];
echo "<h2><a href='$link'>$title</a></h2></br>
$description<br/><br/>";
}
} else
echo "No results found for.\"<b>$keyword</b>\"";
?>
任何帮助将不胜感激。我需要弄清楚如何制作它,以便如果任何关键字未被识别,它不会出错。
【问题讨论】:
-
大声笑,是的,我在重新阅读代码时发现了这一点,谢谢,我现在正在更改它们
-
您正在执行您的查询两次,并获取两次,这会导致您的结果从第二行开始。您描述的错误是如果存在 1 个关键字而另一个不是您想要没有结果,或者您没有返回任何结果? (还有前面提到的 SQL 注入问题(尽管删除了该评论))
-
感谢您的回复。我对 MYSQL 很陌生,因为我在创建我的简单网站时最后离开了搜索栏,因此学习曲线很慢。我还将研究 SQL 注入部分。是否在 else 语句中从 foreach 分离中进行双重查询?我没有意识到这一点,因为当关键字起作用时我没有得到双重结果。
-
取出
mysqli_query($db, $query) or die('Error querying database.');并执行$result = mysqli_query($db, $query) or die('Error querying database.');如果它dies 你的脚本无论如何都会停止。取出$row = mysqli_fetch_array($result);并使用行计数功能。我不确定你目前看到什么行为..实际上下面的答案似乎会解决它..或者至少是它的开始。
标签: php mysql searchbar keyword-search