使用regexp的MySQL查询在Drupal中不起作用

时间:2012-01-27 12:58:24

标签: mysql regex drupal

我有以下问题,由SO提供:

SELECT field_website_value FROM field_data_field_website  WHERE field_website_value NOT REGEXP('^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}(/\S*)?') AND field_website_value!=''

直接在MySQL客户端执行此查询时,它可以正常工作(显示与模式不匹配的值)。

然而,当它放在Drupal中时,它会停止工作,它只会返回非空的行。

$query = "SELECT field_website_value FROM field_data_field_website  WHERE field_website_value NOT REGEXP('^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}(/\S*)?') AND field_website_value!=''";
$res = db_query($query)->fetchAll();
echo count($res);
echo "<pre>";print_r($res);die();

我有什么方法可以在Drupal中使用Regexp吗?

注意:获取所有行并在PHP中应用正则表达式不是一种选择。

1 个答案:

答案 0 :(得分:3)

我不是drupal专家,但我敢打赌db_query函数正在执行mysql_real_escape_string()调用会搞乱正则表达式,是否还有其他函数可以通过而不会这样做?

实际上是导致问题的{}括号,您需要将数据作为变量传递,

$query = "SELECT field_website_value FROM field_data_field_website  WHERE field_website_value NOT REGEXP('%s') AND field_website_value!=''";
$regexp = '^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}(/\S*)?';
db_query($query, $regexp);