【问题标题】:Creating search engine in PHP [duplicate]用PHP创建搜索引擎[重复]
【发布时间】:2013-11-30 12:44:58
【问题描述】:

我已经创建了搜索引擎,因此当有人在搜索框中输入内容时,它会从我的数据库中获取数据并以图像的形式显示结果。

一切正常,但如果我在数据库中有名称为“Lamborghini”的数据,当有人在搜索框输入“lambo”或“Lamborghini”时,它工作正常并显示结果,但当他输入“Lamborghini car”时它没有显示任何结果。

这是我的 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 注入漏洞做点什么。与数据库交互时使用mysqliPDO 扩展名。你可以在这里阅读更多:php.net/manual/en/intro.mysql.php.
  • 这可能是因为您的数据库中没有包含“兰博基尼汽车”的标题,因此找不到它。
  • 是的,但 Google 不仅仅使用 like '%$term%'
  • 考虑使用全文搜索系统,如 Zend Lucene,或者可能在 MySQL 中使用全文匹配。 LIKE 语句只会进行琐碎的匹配(例如,如果关键字反转,将找不到匹配项)。
  • 搜索引擎在哪里?

标签: php mysql


【解决方案1】:

你应该:

  • 修复您的 SQL(使其安全 - 如果您这样保留它,只需一次搜索即可删除整个数据库,请切换到 mysqli 或 PDO,因为不推荐使用 mysql_* 函数)
  • 将您的查询字符串拆分为单独的词并决定如何处理它们(您将使用 OR 还是 AND...换句话说,是否所有搜索词都需要匹配,或者其中任何一个词等等)李>

当您处理所有这些并决定使其更高级时,您应该了解全文搜索。

【讨论】:

  • 这个答案不仅是最好的,也是唯一正确的。
【解决方案2】:

这是因为 { %$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");
}

通过这种方式搜索将检查所有单词。

【讨论】:

    【解决方案3】:

    正如上面人们所说,只需将输入字符串分解为数组并搜索大多数元素匹配的文档(描述,关键字)。还要注意 SQL 注入。

    【讨论】:

      【解决方案4】:

      首先让你的词条搜索爆炸,这样它就会进入一个数组

      <?php
            $term =  $_POST['term'];
            $words = explode(" ", $term);
      ?>
      

      然后为您的搜索的 mysql_query 创建一个 foreach 循环并使用“OR”进行内爆

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

      【讨论】:

      • 这将创建无效的 SQL。
      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      相关资源
      最近更新 更多