PHP PDO bindParam tombait dans un foreach
J'avais une boucle comme ceci :
foreach($Fields as $Name => $Value){
$Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR);
}
Rien de compliqué. Cependant, chaque valeur a été définie sur la dernière dans le tableau ($Fields
).
Comment puis-je réparer cela ?
2 réponses
Cependant, grâce à cela Les gars . J'ai découvert que vous devez passer la valeur par référence avec un &
avant comme ça:
foreach($Fields as $Name => &$Value){
$Query->bindParam(':'.$Name, $Value, PDO::PARAM_STR);
}
Cela a été me rend fou.
Citation réelle de PHP.net :
Vili 28-May-2010 12: 01
Cela fonctionne ($val par référence):
<?php
foreach ($params as $key => &$val){
$sth->bindParam($key, $val);
}
?>
Cela échouera ($val par valeur, car bindParam a besoin de & $ variable):
<?php
foreach ($params as $key => $val) {
$sth->bindParam($key, $val);
}
?>
Si vous n'avez pas besoin de la possibilité de synchroniser la variable avec le paramètre lié avant l'exécution de la requête (ce qui est le cas 99,9% du temps, selon mon expérience), il est probablement préférable d'utiliser simplement PDOStatement::bindValue()
au lieu de PDOStatement::bindParam()
:
foreach ($Fields as $Name => $Value) {
$Query->bindValue(':' . $Name, $Value, PDO::PARAM_STR);
}