Syntax for MySQL REGEXP CONCAT


Syntax for MySQL REGEXP CONCAT

我最终试图使用REGEXP CONCAT函数制作PDO准备语句。在phpmyadmin中,我可以运行以下查询,为我的数据库内容返回适当的结果("城市"值(丹佛,在这种情况下))最终将成为绑定参数,但我现在将它明确地放在那里进行开发):

SELECT `user_ID` as `ID` 
FROM `usermeta` 
WHERE (`meta_key` = 'custom_field')
AND (`meta_value` REGEXP '.*"leagues";.*s:[0-9]+:"A".*')
AND (`meta_value` REGEXP '.*"city";.*s:[0-9]+:"Denver".*')

但是,如果我尝试在最后一行使用CONCAT函数,结果是一个空集。换句话说,MySQL没有在查询本身抛出任何错误,但是没有选择正确的数据:

SELECT `user_ID` as `ID` 
FROM `usermeta` 
WHERE (`meta_key` = 'custom_field')
AND (`meta_value` REGEXP '.*"leagues";.*s:[0-9]+:"A".*')
AND (`meta_value` REGEXP CONCAT('''.*"city";.*s:[0-9]+:"', 'Denver', '".*'''))

我试过转义冒号、分号和句号字符,但没有成功。

你要在表达式中添加引号:

AND (`meta_value` REGEXP CONCAT('''.*"city";.*s:[0-9]+:"', 'Denver', '".*'''))    
                                  ^                                       ^

这些不在你的第一个表达式中。第一个表达式中的引号封装了SQL字符串。所以:

AND (`meta_value` REGEXP CONCAT('.*"city";.*s:[0-9]+:"', 'Denver', '".*'))

我想可以。你也不需要使用mysql的concat。您可以直接将变量连接到绑定中的表达式中。生成SQL:

SELECT `user_ID` as `ID` 
FROM `usermeta` 
WHERE (`meta_key` = 'custom_field')
AND (`meta_value` REGEXP '.*"leagues";.*s:[0-9]+:"A".*')
AND (`meta_value` REGEXP ?)

然后像这样构建绑定:

'.*"city";.*s:[0-9]+:"' . $city . '".*'

前面和后面的.*也不需要。因为你没有使用锚,所以规则也可以匹配。