Запрос PDO / mysqli не возвращает те же строки, что и mysql cli с регулярным выражением - PullRequest
0 голосов
/ 08 июня 2018

У меня возникают некоторые проблемы с PHP PDO, которые также случаются с mysqli

У меня есть запрос mysql, который возвращает 221 строку в mysql cli, но если я запускаю тот же запрос в php, запрос pdo возвращает только 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

Я подозреваю, что это связано с экранированием обратной косой чертыно не уверен.

1 Ответ

0 голосов
/ 09 июня 2018

Вам необходимо удвоить обратную косую черту, поскольку MySQL требуется две обратной косой черты, чтобы соответствовать буквенной обратной косой черте.Кроме того, вам нужно добавить + квантификатор к последнему [0-9] шаблону сопоставления цифр и закрыть шаблон концом строки, $.

Использовать

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

Подробности

  • ^ - начало строки
  • \\\\( - переведено в \\( для команды MySQL - переведено в \( string -a ( char
  • [0-9]+ - 1+ цифр
  • \\\\) - a ) char
  • * - 0+ пробелов (используйте + соответствует 1 или более)
  • [0-9]+ +[0-9]+ - 1+ цифр, 1+ пробелов, 1+ цифр
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...