给定带有占位符的 SQL 查询:
SELECT * FROM table WHERE `a`=? AND `b`=?
和查询参数 ['aaa', 'bbb'],我想用相应的参数替换 ?-占位符。所以,我这样做:
$sql = preg_replace(array_fill(0, count($params), '#\?#'), $params, $sql, 1);
(在这个问题中,我们不专注于mysql转义,引用等)。
一切都很好,我得到
SELECT * FROM table WHERE `a`=aaa AND `b`=bbb
但是,如果我们的第一个参数看起来像这样:“?aa”,一切都会失败:
SELECT * FROM table WHERE `a`=bbba AND `b`=?
显然,第一个替换传递将“a=?”更改为“a=?aa”,第二个传递将此(刚刚插入的)问号更改为“bbb”。
问题是:我该如何绕过这种令人困惑的preg_replace行为?
婷婷同学_
喵喔喔