我创建了一个函数来打印一个包含变量的prepared-statement-sql-string,基于我在另一个StackOverflow question中找到的内容.
这是我的代码:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
当我运行它时,我得到: fatal error :第 3 行只能通过引用传递变量
。但是当我使用
$sql = preg_replace('/\?/', "'". $param . "'", $sql, 1);
对于第 3 行,它工作正常。
知道为什么吗?
最佳答案
最后一个参数 count 是通过引用传递的。您可以在 http://us.php.net/str_replace 的描述中看到这一点变量前面有一个 &
。
这意味着您不能在那里使用文字 1
。你必须这样做:
$sql = str_replace('?', "'" . $param . "'", $sql, $count);
echo $count;
您现在会在屏幕上显示更换了多少个实例。
关于PHP:str_replace() 中的 "... variables can be passed by reference"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5842366/