匹配PHP中的关键字

时间:2011-11-30 21:59:46

标签: php mysql full-text-search

我的网站上有搜索功能,用户可以搜索产品。它工作得很好,除了当用户搜索'ipod'时它没有结果,因为产品的名称是'apple ipod'。如何对其进行编码,以便在搜索产品名称的一部分时,出现正确的产品?

我的代码如下:

    <div id="search" align="right">
<form action="" method="get">
  <span id="sprytextfield1">
  <input name="search" id="search2" type="text" width="250px"/>
  <span class="textfieldRequiredMsg"></span></span>
  <input name="" type="submit" value="Search"/>
</form></div>
<br /><br />
<h2>Your Search Results For "<?php echo $_GET['search'] ?>":</h2><hr />

    <table border="0" cellpadding="2px" width="600px">
        <?
        $search = $_GET['search'];

            $result=mysql_query("select * from products WHERE name = '$search'")
            or die(mysql_error());
if (mysql_num_rows($result) == 0) {
       echo '&nbsp;'.'Could Not Be Found';
    }   
    else {

            while($row=mysql_fetch_array($result)){

        ?>
        <tr>
            <td><?php echo'<img src="getImage.php?id=' . $row['serial'] .'"/>'
?>            </td>
            <td>    <b><a href="pdaproduct.php?product_id=<?=$row['serial']?>"><?=$row['name']?></a></b><br />
                    Price:<big style="color:green">
                        £<?=$row['price']?></big><br /><br />
                    <input type="button" value="Add to Cart" onclick="addtocart(<?=$row['serial']?>)" />
            </td>
        </tr>
        <tr><td colspan="2"><hr size="1" /></td>

        <? 
            }
    }?>
    </table>

感谢您给出的任何建议! :)

3 个答案:

答案 0 :(得分:2)

忽略您的代码永远不会用于生产(这是不安全的)这一事实,您应该在查询中使用LIKE

mysql_query("select * from products WHERE name LIKE '%$search%'")

现在,针对SQL注入和其他您不想要的事情进行了优化,这将成为:

mysql_query("select * from products WHERE name LIKE '%".mysql_real_escape_string($search)."%'")

答案 1 :(得分:2)

您可以使用LIKE语句,如此

select * from products WHERE name LIKE '%$search%'

以上将匹配'apple ipod','ipod'和'apple ipod'

答案 2 :(得分:0)

在表格中搜索关键字(例如:您的产品列表) LIKE 可能非常有用,但在长文本字段(例如:说明)上效果不佳,因此请考虑全文index和 MATCH()AGAINST 运算符。

这里是mysql手册page

为了避免返回页面找不到结果,抱歉,(在无结果查询之后),您可以使用 SOUNDEX 运算符

mysql_query("select * from products WHERE SOUNDEX(name) > 0 ORDER BY SOUNDEX(name) DESC" ):

这里是mysql soundex manual page