Подтвердить что ты не робот

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

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

Вот мой код:

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 работает нормально.

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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