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

use*_*524 1 php mysql joomla

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

$filterQuery .=' LIKE %' . $db->Quote(JString::strtolower($filter) . '%');
Run Code Online (Sandbox Code Playgroud)

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

为什么它不能在PHP中工作?

And*_*die 7

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

$filterQuery .=' LIKE ' . $db->quote('%' . $filter . '%');
Run Code Online (Sandbox Code Playgroud)

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

$filterQuery .=' LIKE ' . $db->quote('%' . $db->escape($filter, true) . '%');
Run Code Online (Sandbox Code Playgroud)

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

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