gpt4 book ai didi

mysql - CakePHP MySQL 重复运算符操作数无效 - 生成的 SQL 工作正常,但蛋糕报告错误

转载 作者:行者123 更新时间:2023-11-29 03:01:01 33 4
gpt4 key购买 nike

很多问题都与 1139: repetition-operator operand invalid 有关,但我还没有找到一个在 mySQL 中查询正常但从 cake 中调用时失败的问题。

我正在从蛋糕中查找所有内容,并希望将结果限制为存在有效英国手机号码的 ID(该字段可以同时包含非手机号码和非英国号码)。我通过 MySQL 计算出了我需要的 SQL:

select 
distinct(client_id)
from
phone_details
where
number rlike '^((00|\\+)44|0)7[[:digit:]]{9}$'

这给了我预期的结果。所以,我在 Cake 中编写了相同的代码:

$res = $this->PhoneDetail->find('all', array(
'recursive' => -1,
'conditions' => array(
'PhoneDetail.number rlike \'^((00|\\+)44|0)7[[:digit:]]{9}$\''
),
'fields' => array('DISTINCT(PhoneDetail.client_id)')
));

这会导致错误:

SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp

错误继续显示尝试的查询:

SELECT 
DISTINCT(`PhoneDetail`.`id`)
FROM
`db`.`phone_details` AS `PhoneDetail`
WHERE
`PhoneDetail`.`number` rlike '^((00|\\+)44|0)7[[:digit:]]{9}$'

现在,我看不出我最初放入 MySQL 的内容与正在生成的蛋糕之间的区别,将错误查询粘贴到 MySQL 中也能正常工作!所以我想知道 Cake 是否正在对正则表达式进行一些转义,从而导致在打印错误消息之前再次被删除的问题。如果是这样,我该如何解决这个问题?

注意:我已经大大简化了查询以使其更易于理解,但删除正则表达式使这一切都完美无缺,所以我很高兴这就是错误所在。

我也尝试过使用 REGEXP 得到相同的结果。

任何建议都会很棒!

最佳答案

完全按照 AD7six 的建议 - 将 CakePHP 中的正则表达式版本更改为:

$res = $this->PhoneDetail->find('all', array(
'recursive' => -1,
'conditions' => array(
'PhoneDetail.number rlike \'^((00|\\\\+)44|0)7[[:digit:]]{9}$\''
),
'fields' => array('DISTINCT(PhoneDetail.client_id)')
));

按预期工作。

关于mysql - CakePHP MySQL 重复运算符操作数无效 - 生成的 SQL 工作正常,但蛋糕报告错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23636009/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com