我的情况是我的通配符搜索没有真正起作用我想到它应该... 这是我正在运行的MySQL查询,它只返回整个单词......
例如。如果我输入“phone”作为搜索词,它将返回所有带有“phone”的行,但不会返回带有“phone”的行(注意添加的's')
mysql_query(" SELECT * FROM posts WHERE permalink = '$permalink' AND LOWER(raw_text) LIKE '%$str%' " );
如何让它返回搜索字的所有变体?显然我知道这可能会遇到问题,因为如果用户输入一个共同的字母,它可以返回各种匹配,我想我可以把它作为高级搜索选项的一部分。
ADENDUM 我已经把它缩小到了通配符的问题,但是我正在使用返回的数据...我正在我的正则表达式中我正在抛出数据。
$pattern= "/(?:[\w\"',.-]+\s*){0,5}[\"',.-]?\S*".$str."(\s|[,.!?])(\s*[A-Za-z0-9.,-]+){0,5}/";
preg_match_all($pattern, $row["raw_text"], $matches);
正则表达式找不到我返回的原始数据中的字符串,所以它给我一个空值。一个新的问题,我对正则表达式并不熟悉,所以我也很想把这个问题弄出来......也许我很快就会提出一个新的问题!
谢谢, 中号
答案 0 :(得分:1)
我认为还有其他事情正在发生。查询的%
部分似乎是正确的。这似乎是确认:
select 'phones' LIKE '%phone%';
+-------------------------+
| 'phones' LIKE '%phone%' |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.00 sec)
顺便说一下,我真的希望你在$str
上做一个严格的卫生设施(如果它是来自用户输入,那么$permalink
也是如此)。您应该只允许使用字母数字和少量其他安全字符(可能是空格),并且在mysql_real_escape_string()
中使用它之前应该通过mysql_query()
运行它。更好的是,请查看PDO
。
无论如何,回到故障排除:尝试一件事可能是让程序记录您发送到mysql_query()
的字符串。基本上,将对mysql_query()的调用更改为对error_log()
或echo()
或类似的调用。然后将生成的查询复制并粘贴到MySQL命令行工具或PHPmyAdmin等等。当该查询不能按照您期望的方式工作时,至少您可以查看它并进行调整以找出问题。谁知道,一旦你看到查询拼写出来,也许它会非常明显。
答案 1 :(得分:0)
我怀疑您的$str
变量中有一个尾随空格,可以解释您所看到的内容:您的LIKE
条件为'%phone %'
,与"... phone ..."
匹配,但不是"... phones ..."
。
首先尝试修剪你的价值。