请帮忙...... 我需要能够在我的数据库中搜索确切的单词..,我已经使用了不同的方法..
$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";`
这非常有效,但当我尝试使用\
或"
搜索字词时,会返回错误。我已经使用了htmlspecialchars
和mysql_real_escape_string
,但问题仍然存在..
$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”也表明了,我不想要那个。
我无法使用全文..
答案 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总是会非常缓慢地执行。