PHP:“...变量可以通过引用传递”在 str_replace() 中?
我创建了一个函数来打印一个包含变量的准备好的语句sql字符串,基于我在另一个StackOverflow问题。
这是我的代码:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
当我运行此代码时,我得到:第 3 行的致命错误:只有变量可以通过引用传递
。但是,当我使用
$sql = preg_replace('/\?/ ', "'" . $param "'", $sql, 1);
对于第 3 行,它工作正常。
知道为什么吗?
I created a function to print a prepared-statement-sql-string with the variables in it, based on what I found in this other StackOverflow question.
Here is my code:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
When I run this I get: Fatal error: Only variables can be passed by reference
for line 3. However when i use
$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);
for line 3 it works fine.
Any idea why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最后一个参数 count 通过引用传递。您可以在 http://us.php.net/str_replace 的描述中看到这一点,其中有一个 < code>& 位于变量前面。
这意味着您不能在那里使用文字
1
。您必须这样做:您现在将在屏幕上显示有多少实例被替换。
The very last parameter, count, is passed by reference. You can see this in the description at http://us.php.net/str_replace where there's a
&
in front of the variable.This means you cannot use a literal
1
there. You'd have to do:You'll now have displayed on the screen how many instances were replaced.
查看
preg_replace
和 < a href="http://php.net/manual/en/function.str-replace.php" rel="nofollow">str_replace
你就会明白为什么。str_replace
的第四个参数必须通过引用传递,但preg_replace
的情况并非如此。Look at the documentation for
preg_replace
andstr_replace
and you will see why.str_replace
's fourth argument must be passed by reference, but this is not the case forpreg_replace
.我重写自 VoteyDisciple
I rewrite from VoteyDisciple