用PHP创建搜索引擎

用PHP创建搜索引擎,php,mysql,Php,Mysql,我已经创建了搜索引擎,所以当有人在搜索框中键入时,它会从我的数据库中获取数据,并在图像中显示结果 一切正常,但如果我在数据库中有名为“兰博基尼”的数据,当有人在搜索框“兰博”或“兰博基尼”中键入时,它正常工作并显示结果,但当他键入“兰博基尼汽车”时,它不会显示任何结果 这是我的PHP代码: <html> <link href="css/imgpages.css" rel="stylesheet" type="text/css"> <head>

我已经创建了搜索引擎,所以当有人在搜索框中键入时,它会从我的数据库中获取数据,并在图像中显示结果

一切正常,但如果我在数据库中有名为“兰博基尼”的数据,当有人在搜索框“兰博”或“兰博基尼”中键入时,它正常工作并显示结果,但当他键入“兰博基尼汽车”时,它不会显示任何结果

这是我的PHP代码:

<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 }   ?>