PHP: “... les variables peuvent être passés par référence” dans str_replace()?
J'ai créé une fonction pour imprimer un prêt de l'instruction sql-chaîne avec les variables sur la base de ce que j'ai trouvé dans cette autre StackOverflow question.
Voici mon code:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace('?', "'" . $param . "'", $sql, 1);
}
printError($sql);
Lorsque je l'exécute j'obtiens: Fatal error: Only variables can be passed by reference
pour la ligne 3. Cependant quand j'utilise
$sql = preg_replace('/\?/', "'" . $param . "'", $sql, 1);
pour la ligne 3, il fonctionne très bien.
Aucune idée pourquoi?
Vous devez vous connecter pour publier un commentaire.
Le dernier paramètre, le nombre, est passé par référence. Vous pouvez les voir dans la description à http://us.php.net/str_replace où il y a un
&
en face de la variable.Cela signifie que vous ne pouvez pas utiliser un littéral
1
là. Que vous avez à faire:Vous aurez maintenant affiché sur l'écran de combien de cas ont été remplacés.
$count
paramètre de la réalité. C'est une "sortie" de paramètre, et non pas un "paramètre".str_replace()
ne pas avoir le choix. Comme vous l'avez déjà noté,preg_replace()
n'.Regarder la documentation
preg_replace
etstr_replace
et vous verrez pourquoi.str_replace
s'quatrième argument doit être passé par référence, mais ce n'est pas le cas pourpreg_replace
.$count
avecpreg_replace
, mais le$count
paramètre pourpreg_replace
est cinquième, pas quatrième. L'OP a l'aide de$limit
avecpreg_replace
, qui fait quelque chose d'autre.Je réécriture de VoteyDisciple