php查询连续搜索一个字符串

时间:2014-01-21 19:56:51

标签: php mysql joomla

如何在php中搜索一行中的字符串?我写了这段代码:

$filterQuery .=' LIKE %' . $db->Quote(JString::strtolower($filter) . '%');

它在mysql中用于搜索字符串:LIKE'%stringtosearch%'

为什么它在php中不起作用?

4 个答案:

答案 0 :(得分:7)

如前所述,您忘记了%...%部分的引号。但是,默认情况下,MySQL不区分大小写,因此您可以删除JString调用,除非您专门将MySQL服务器配置为区分大小写。然后可以将替代用法简化为:

$filterQuery .=' LIKE ' . $db->quote('%' . $filter . '%');

但请注意,如果使用用户输入,则SQL通配符可能会导致DOS攻击(用户可能在过滤器字符串中包含%和_字符)。为防止这种情况,您可以使用以下格式:

$filterQuery .=' LIKE ' . $db->quote('%' . $db->escape($filter, true) . '%');

这将逃避过滤器本身(并允许您搜索真正的下划线或%字符)。这就是核心代码处理这种情况的方式,如下所示:

https://github.com/joomla/joomla-cms/blob/staging/administrator/components/com_content/models/articles.php#L285

答案 1 :(得分:1)

注意:@Andrew Eddie在上面给出了更好的答案

$filterQuery .=' LIKE ' . $db->quote('%'. JString::strtolower($filter) . '%');

答案 2 :(得分:0)

因为您的括号中的代码会在字符串周围添加引号,所以请改为执行此操作...

$filterQuery .=" LIKE '%" . strtolower($filter) . "%'");

请记住,在查询数据库之前,您需要清理/转义数据

答案 3 :(得分:0)

如果它像LIKE '%stringtosearch%'那样有效,那么在'之前和之后添加%就像这样

$filterQuery .= " LIKE '%" . $db->Quote(JString::strtolower($filter) . "%' ");
                       ^                                                 ^
相关问题