-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";`

这确实很好,但是当我尝试使用\or搜索单词时,"它会返回错误。我已经用过htmlspecialcharsmysql_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%'但是当我输入一个确切的单词时。“INK”这个词也显示了“WRINKLED”,我不想这样。

我不能使用全文..

4

2 回答 2

0

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

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

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

于 2013-07-23T05:23:27.583 回答
0

我认为您应该尝试对 $param 使用 PHP 函数 addlashes(),如下所示:

$param = 添加斜杠($param);

这将使方法 1 起作用。

mysql_real_escape_string 的行为是基于默认字符集的,不知道你用的是哪一个。既然它不适合你,那么addslashes 可能会。

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

于 2013-07-23T05:29:48.417 回答