查询
SELECT * FROM foo WHERE bar REGEXP "foo-bar";
按预期返回结果,但是当执行我认为是Drupal中的功能等价物时
db_query("SELECT * FROM foo WHERE bar REGEXP (:regex)", array("regex"=>"\"foo-bar\""));
没有返回任何结果..我想知道它是否可能是由于连字符用于正则表达式范围等但是找不到任何相关的解决方法。
编辑:虽然我之前尝试过类似于罗宾斯的帖子,但按照这一思路,以下内容会返回结果:
$bar = db_query("SELECT * FROM foo WHERE bar LIKE '%foo-bar%' ")
然而,
$bar = db_query("SELECT * FROM foo WHERE bar LIKE ':regex' ", array("regex"=>"%foo-bar%"));
或任何变体(例如将arg从arg移动到查询)都不会。
我想知道我做错了,或者是否存在字符串替换被drupal转义的问题,但是Drupal db_query documentation在论证中没有提到正则表达式我不相信大肆宣传因安全/显示目的而逃脱..
PS。温柔,第一个Stackover流程帖子,以及Drupal和MySQL的新手;)
答案 0 :(得分:0)
SELECT * FROM foo WHERE bar LIKE '%foo-bar%'
它适用于你。
答案 1 :(得分:0)
原来这是一个语法问题。看起来db_query用引号封装了字符串。
以下陈述符合预期:
$bar = db_query("SELECT * FROM foo WHERE bar REGEXP (:regex) ", array("regex"=>"foo-bar"));
和
$bar = db_query("SELECT * FROM foo WHERE bar LIKE (:regex) ", array("regex"=>"%foo-bar%"));