如何在php中搜索一行中的字符串?我写了这段代码:
$filterQuery .=' LIKE %' . $db->Quote(JString::strtolower($filter) . '%');
它在mysql中用于搜索字符串:LIKE'%stringtosearch%'
为什么它在php中不起作用?
答案 0 :(得分:7)
如前所述,您忘记了%...%
部分的引号。但是,默认情况下,MySQL不区分大小写,因此您可以删除JString
调用,除非您专门将MySQL服务器配置为区分大小写。然后可以将替代用法简化为:
$filterQuery .=' LIKE ' . $db->quote('%' . $filter . '%');
但请注意,如果使用用户输入,则SQL通配符可能会导致DOS攻击(用户可能在过滤器字符串中包含%和_字符)。为防止这种情况,您可以使用以下格式:
$filterQuery .=' LIKE ' . $db->quote('%' . $db->escape($filter, true) . '%');
这将逃避过滤器本身(并允许您搜索真正的下划线或%字符)。这就是核心代码处理这种情况的方式,如下所示:
答案 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) . "%' ");
^ ^