如何使用正则替换多个'?'呢

如何使用正则替换多个'?'呢
$sql = "insert into t set a=?,b=?,c=?,d=?";
$rep=[1,"aa",2,"bb"];
// 替换结果 insert into t set a=1,b='aa',c=2,d='bb'

用preg_replace应该怎么写呢?

阅读 3.3k
4 个回答

可以参考这个项目

image.png

$sql = 'xxxxxxxx';// SQL
$bindings = [];// 参数

$sqlWithPlaceholders = str_replace(['%', '?', '%s%s'], ['%%', '%s', '?'], $sql);

// 这一行主要是对 Laravel 内日期对象转换
// $bindings = $query->connection->prepareBindings($bindings);
// 这里需要拿到 PDO 链接,给一些字符串参数添加引号
$pdo = $query->connection->getPdo();
$realSql = $sqlWithPlaceholders;

if (count($bindings) > 0) {
    // 如果你不想要 PDO 连接,那就可以把 array_map 替换成 $bindings
    $realSql = vsprintf($sqlWithPlaceholders, array_map([$pdo, 'quote'], $bindings));
    // 这样
    // $realSql = vsprintf($sqlWithPlaceholders, $bindings);
}

var_dump($realSql);
$sql = "insert into t set a=?,b=?,c=?,d=?";
$rep=[1,"aa",2,"bb"];
echo vsprintf(str_replace('?','\'%s\'',$sql), $rep);

insert into t set a='1',b='aa',c='2',d='bb'

来个js的

arr = [1,"aa",2,"bb"];
str.replace(/\?/g, function(item, index) {
    let ele = arr.shift() // 取队首
    return ele
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题