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 ?

25
demandé sur Charles 2012-08-27 19:01:43

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);
}
?>
44
répondu David Bélanger 2012-08-27 15:07:41

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);
}
6
répondu FtDRbwLXw6 2012-08-27 15:08:46