使用LIKE搜索确切的单词

时间:2013-07-23 05:10:28

标签: php mysql

请帮忙...... 我需要能够在我的数据库中搜索确切的单词..,我已经使用了不同的方法..

方法1

$param2 = "SELECT * from item WHERE prodname REGEXP '[[:<:]]($param)[[:>:]]'
           order by CASE WHEN instr(prodname, '$param') = 0 then 1 else 0 end,         
           instr(prodname, '$param') ASC";`

这非常有效,但当我尝试使用\"搜索字词时,会返回错误。我已经使用了htmlspecialcharsmysql_real_escape_string,但问题仍然存在..

方法2

$param2 = "WHERE prodname LIKE '$param %' OR prodname LIKE '% $param'
           OR prodname LIKE ' $param%' OR prodname LIKE '%$param '
           OR prodname LIKE '% $param %'
           order by CASE WHEN instr(prodname, '$param') = 0 then 1 else 0 end, instr(prodname, '$param') ASC";`

这也很好但是当我键入确切的产品,例如“STAMP PAD INK(RED)”时,它返回结果“NOT FOUND”,但它显示我只输入“STAMP PAD INK”...由于某种原因它当我添加'%$param%'但是当我输入一个确切的单词ex时,它会起作用。 “INK”这个词“WRINKLED”也表明了,我不想要那个。

我无法使用全文..

2 个答案:

答案 0 :(得分:0)

方法2: 要获得确切的产品,请使用:LIKE'$ param'

%字符匹配任意数量的字符,甚至是零字符,但例如,'%$ param%'中仍有空格字符。

更多信息:http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

答案 1 :(得分:0)

我认为你应该尝试在$ param中使用PHP函数addslashes(),如下所示:

$ param = addslashes($ param);

这将使方法1起作用。

mysql_real_escape_string的行为基于默认字符集,我不知道您使用的是哪一个。因为它不适合你,所以addslashes可能会。

顺便说一句,您可能希望进一步了解如何使用全文索引,因为随着数据库的增长,REGEXP有可能变得非常缓慢。你展示的方法2总是会非常缓慢地执行。