PHP:在str_replace()中"...变量可以通过引用传递"?

Dex*_*ter 22 php pass-by-reference str-replace

我根据我在其他StackOverflow问题中找到的内容,创建了一个函数来打印带有变量的prepared-statement-sql-string .

这是我的代码:

foreach($params as $idx => $param) {
    if ($idx == 0) continue;
    $sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:Fatal error: Only variables can be passed by reference对于第3行.但是当我使用时

$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);

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

知道为什么吗?

Vot*_*ple 37

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

这意味着你不能在1那里使用文字.你必须这样做:

$sql = str_replace('?', "'" . $param . "'", $sql, $count);
echo $count;
Run Code Online (Sandbox Code Playgroud)

您现在将在屏幕上显示已更换的实例数.

  • 实际上,OP误解了`$ count`参数实际上做了什么.它是一个"out"参数,而不是"in"参数. (13认同)
  • 没有。`str_replace()` 没有这个选项。正如您已经注意到的,“preg_replace()”可以。 (2认同)