PHP: “...变量可以通过引用传递“,str_replace()?

2022-08-30 18:22:57

我创建了一个函数来打印一个包含变量的预准备语句 sql 字符串,基于我在另一个 StackOverflow 问题中发现的内容

这是我的代码:

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);

对于第3行,它工作正常。

任何想法为什么?


答案 1

最后一个参数 count 通过引用传递。您可以在 http://us.php.net/str_replace 的描述中看到这一点,其中变量前面有一个。&

这意味着您不能在那里使用文本。你必须做:1

$sql = str_replace('?', "'" . $param . "'", $sql, $count);
echo $count;

现在,您将在屏幕上显示替换了多少个实例。


答案 2

查看preg_replacestr_replace的文档,您就会明白原因。的第四个参数必须通过引用传递,但对于 .str_replacepreg_replace


推荐