带有正则表达式的 MySQL 查询在 Drupal 中不起作用

标签 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 中应用正则表达式不是一个选项。

最佳答案

我不是 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);

关于带有正则表达式的 MySQL 查询在 Drupal 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033562/

相关文章:

MySQL 通过选择 rownum 作为起始值来限制选择

javascript - Lua 模式匹配中 ".-"的 RegEx 等价物是什么?

正则表达式:在开头或某些特殊字符之后匹配字符串

python - 编译标志号 16

c++ - MySQL 连接器 C++ - 无效指针

mysql - 在 SQL 中比较其他 2 列时,从列中选择 ID

mysql - 将脚本传输到新服务器后,SQL 和文件系统之间的编码文件名不匹配

css - 将 css 属性添加到 menu_local_action Drupal 7

php - SQL UPDATE 查询出错

drupal - FFMPEG - 将任何类型的文件转换为与 IOS 和 Flash 兼容的 Mp4