用PHP创建搜索引擎
我已经创建了搜索引擎,所以当有人在搜索框中键入时,它会从我的数据库中获取数据,并在图像中显示结果 一切正常,但如果我在数据库中有名为“兰博基尼”的数据,当有人在搜索框“兰博”或“兰博基尼”中键入时,它正常工作并显示结果,但当他键入“兰博基尼汽车”时,它不会显示任何结果 这是我的PHP代码:用PHP创建搜索引擎,php,mysql,Php,Mysql,我已经创建了搜索引擎,所以当有人在搜索框中键入时,它会从我的数据库中获取数据,并在图像中显示结果 一切正常,但如果我在数据库中有名为“兰博基尼”的数据,当有人在搜索框“兰博”或“兰博基尼”中键入时,它正常工作并显示结果,但当他键入“兰博基尼汽车”时,它不会显示任何结果 这是我的PHP代码: <html> <link href="css/imgpages.css" rel="stylesheet" type="text/css"> <head>
<html>
<link href="css/imgpages.css" rel="stylesheet" type="text/css">
<head>
<title>Search the Database</title>
</head>
<body>
<form action="" method="post">
Search: <input type="text" name="term" /><br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
<?php
include("connection.php");
$term = $_POST['term'];
$query = mysql_query("select * from save_data where Title like '%$term%'");
while($row = mysql_fetch_array($query)) {
$post_id = $row['ID'];
$title = $row['Title'];
$image = $row['Name'];
?>
<div id="body">
<a href="pictures.php?title=<?php echo $title; ?>">
<div id="title"><?php echo $title; ?></div></a>
<a href="pictures.php?title=<?php echo $title; ?>">
<img src='uploads/<?php echo $image; ?>' width='140' height='140'></a>
</div>
<?php } ?>
搜索数据库
搜索:
你应该:
- 修复您的SQL(确保它的安全性-如果您保持这样的状态,只需一次搜索就可以删除整个数据库,切换到mysqli或PDO,因为mysql_*函数已被弃用)
- 将查询字符串拆分为单独的单词,并决定如何处理它们(是否使用或…换句话说,是否所有搜索词都需要匹配,或其中任何一个,等等)
当您处理所有这些问题并决定使其更高级时,您应该了解全文搜索。这是因为{%$term%}表示查询尝试搜索包含$term中所有字符串的内容。试试这个:
$term = explode(" ",$term);
if (count($term) > 0) {
$Where = '';
foreach($term as $Item) {
$Where .= "Title like '%$Item%' OR ";
}
$Where = substr($Where,0,-4);
$query = mysql_query("SELECT * FROM `save_data` WHERE $Where");
}
通过这种方式,搜索将检出所有单词。首先使术语搜索爆炸,这样它将进入一个数组
$term = $_POST['term'];
$c=explode(" ",$term);
foreach($c as $n)
{
$query = mysql_query("select * from save_data where Title like '%$n%'");
}
<?php
$term = $_POST['term'];
$words = explode(" ", $term);
?>
然后为搜索的mysql\u查询创建一个forearch循环,并使用“OR”内爆
如上所述,只需将输入字符串分解成一个数组,然后搜索大多数元素匹配的文档(描述、关键字)。还要注意SQL注入。您真的应该对SQL注入漏洞采取一些措施。与数据库交互时,请使用mysqli
或PDO
扩展名。您可以在此处阅读更多内容:。这可能是因为您的数据库中没有包含“兰博基尼汽车”的标题,所以它找不到。是的,但谷歌使用的不仅仅是“%$term%”之类的
可以考虑使用全文搜索系统,如Zend Lucene,或者在MySQL中使用全文匹配。类似于
语句的语句只会进行琐碎的匹配(例如,如果关键字被颠倒,将找不到匹配项)。搜索引擎在哪里?此代码复制OP发布的SQL注入漏洞。这将为匹配多个单词的页面显示重复的条目。这将创建无效的SQL。此答案不仅是最好的,这是唯一正确的。
<?php
foreach ($words as $words)
{
$queries[]="select * from save_data where Title LIKE '%" .
mysql_real_escape_string($words) . "%'";
}
$query=implode(' OR ' ,$queries);
$results=mysql_query($query);
while($row = mysql_fetch_array($results))
{
$post_id = $row['ID'];
$title = $row['Title'];
$image = $row['Name'];
?>
<div id="body">
<a href="pictures.php?title=<?php echo $title; ?>">
<div id="title"><?php echo $title; ?></div>
</a>
<a href="pictures.php?title=<?php echo $title; ?>">
<img src='uploads/<?php echo $image; ?>' width='140' height='140'>
</a>
</div>
<?php } ?>