PHP: «… переменные могут передаваться по ссылке» в str_replace ()?

Я создал функцию для печати строки подготовленного-statement-sql с переменными в ней, основываясь на том, что я нашел в этом другом вопросе StackOverflow .

Вот мой код:

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

Когда я запускаю это, я получаю: Fatal error: Only variables can be passed by reference для строки 3. Однако когда я использую

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

для линии 3 он отлично работает.

Любая идея почему?

Последний параметр, count, передается по ссылке. Это можно увидеть в описании на странице http://us.php.net/str_replace, где есть & перед переменной.

Это означает, что вы не можете использовать литерал 1 там. Вам нужно будет:

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

На экране отобразится, сколько экземпляров было заменено.

Посмотрите документацию для preg_replace и str_replace и вы поймете, почему. Четвертый аргумент str_replace должен передаваться по ссылке, но это не относится к preg_replace .