pdo/mysqli查询返回的行与使用regex的mysql cli不同

xkftehaa  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(446)

我在使用php-pdo时遇到了一些问题,mysqli也遇到了这些问题
我有一个mysql查询,在mysql cli中返回221行,但是如果我在php中运行相同的查询,pdo query只返回25行,并且是不正确的行,

$stmt = $pdo->query("SELECT id, company_phone, locale, headquarters FROM xmltest.company where company_phone regexp '^\\([0-9]+\\)\\ [0-9]+\\ [0-9]' = 1 and char_length(company_phone) = 14");

   /* SELECT id, company_phone, locale, headquarters FROM xmltest.company where 
company_phone regexp '^\\([0-9]+\\)\\ [0-9]+\\ [0-9]' = 1 and 
char_length(company_phone) = 14  */

正则表达式匹配电话,如(021)551 9771,但在pdo返回电话,如64 06 358 7361
我怀疑与反斜杠越狱有关,但不确定。

3qpi33ja

3qpi33ja1#

您需要将反斜杠加倍,因为mysql需要两个反斜杠来匹配文本反斜杠。另外,你需要补充 + 最后一个量词 [0-9] 数字匹配模式,并用字符串锚结束模式, $ .
使用

'^\\\\([0-9]+\\\\) *[0-9]+ +[0-9]+$'

细节 ^ -字符串开头 \\\\( -翻译成 \\( 对于mysql命令-翻译成 \( 字符串-a ( 烧焦 [0-9]+ -1+位数 \\\\) -a ) 烧焦 * -0+空格(使用 + 匹配1个或多个) [0-9]+ +[0-9]+ -1+位,1+空格,1+位 $ -字符串结尾。

相关问题