php - MySQL REGEXP CONCAT 语法

标签 php mysql regex

我最终尝试使用 REGEXP CONCAT 函数制作 PDO 准备语句。在 phpmyadmin 中,我可以运行以下查询,该查询为我的数据库内容返回正确的结果(“城市”值(在本例中为丹佛))最终将成为绑定(bind)参数,但我现在将其明确放入其中以进行开发) :

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。您可以将变量连接到绑定(bind)中的表达式中。编写 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 ?)

然后构建绑定(bind),如下所示:

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

前导和尾随的 .* 也不是必需的。如果没有该规则,规则也会匹配,因为您没有使用 anchor 。

关于php - MySQL REGEXP CONCAT 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39372564/

相关文章:

php - paypal 快速结账不显示使用信用卡支付的链接

php - 如何返回 pdo 准备好的语句来检查用户是否存在,然后从数据库返回 id?

regex - 在 D 中的未转义字符上拆分字符串

php - 如何使用 FPDF 和 PHP 进行静默打印

php - 获取数组的一部分

php - 非常非常慢的查询。我该如何改进它?

mysql - 升级到适用于 Windows 的 MAMP PRO 3.2.0 导致 #1045 - 访问被拒绝错误

mysql - 定位并删除 mysql 表中的元素

c# - 'generic' 电话号码的基本正则表达式

MongoDB中数组内的正则表达式