Учитывая SQL -запрос с местозаполнителями:
SELECT * FROM table WHERE `a`=? AND `b`=?
и параметрами запроса ['aaa', 'bbb'], я хотел бы заменить? -Заполнители соответствующими параметрами. Итак, я делаю это так:
$sql = preg_replace(array_fill(0, count($params), '#\?#'), $params, $sql, 1);
(мы не концентрируемся на mysql -экранировании, цитировании и т. Д. c. В этом вопросе).
Все работает нормально и Я получаю
SELECT * FROM table WHERE `a`=aaa AND `b`=bbb
Но если наш первый параметр выглядит так: «? Aa», все терпит неудачу:
SELECT * FROM table WHERE `a`=bbba AND `b`=?
очевидно, первый проход замены заменяет «a =?» в "a =? aa", а второй проход меняет этот (только что вставленный) вопросительный знак на "bbb".
Вопрос: как мне обойти это запутанное поведение preg_replace?