我创建了一个函数,根据我在另一个StackOverflow question中找到的内容,打印一个包含变量的prepared-statement-sql-string。
下面是我的代码:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
当我运行下面的命令时,我得到的是:第3行的Fatal error: Only variables can be passed by reference
。
$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);
对于第三行,它工作得很好。
知道为什么吗?
发布于 2011-04-30 22:30:19
最后一个参数count是通过引用传递的。您可以在http://us.php.net/str_replace的描述中看到这一点,在该变量前面有一个&
。
这意味着您不能在那里使用文字1
。你必须这样做:
$sql = str_replace('?', "'" . $param . "'", $sql, $count);
echo $count;
现在,您已经在屏幕上显示了替换了多少个实例。
发布于 2011-04-30 22:28:54
查看preg_replace
和str_replace
的文档,您就会明白其中的原因。str_replace
的第四个参数必须通过引用传递,但preg_replace
并非如此。
https://stackoverflow.com/questions/5842366
复制相似问题