2 回答
TA贡献1844条经验 获得超8个赞
您可以使用preg_replace_callback,每次更换一次使用一个项目。$params
$sql = 'SELECT * FROM table WHERE `a`=? AND `b`=?';
var_dump('Original: ' . $sql);
$params=['aaa','bbb'];
$sql = preg_replace_callback("/\\?/",function($m) use (&$params) {
return array_shift($params);
}, $sql);
var_dump('Result: ' . $sql);
TA贡献1735条经验 获得超5个赞
我不会用 或 这样做。我会使用,所以空的返回可以被删除(如果有空的删除选项,我会使用它)。因为在那里循环访问返回并添加值。您也可以用这个来引用这些值。我推测这样做的目的是调试参数化查询。preg_replacestr_replacepreg_splitexplode
$sql = 'SELECT * FROM table WHERE `a`=? AND `b`=?';
$v = array('1?1', "222");
$e = preg_split('/\?/', $sql, NULL, PREG_SPLIT_NO_EMPTY);
$c = '';
foreach($e as $k => $v1){
$c .= $v1 . "'" . $v[$k] ."'";
}
error_log($c);
然后,您的错误日志将包含:
SELECT * FROM table WHERE `a`='1?1' AND `b`='222'
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报