Я создал функцию для печати строки подготовленного-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
.