Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO plusieurs espaces réservés nommés ne récupère pas les données

bindParam Nécessite une référence

Le problème est causé par la façon dont vous liez les paramètres dans la boucle foreach.

foreach($bindings as $placeholder=>$bound){
    echo $placeholder . " - " . $bound."<br/>";
    $stmt->bindParam($placeholder, $bound);
}

bindParam nécessite une référence. Il lie la variable, pas la valeur, à l'instruction. Étant donné que la variable dans une boucle foreach est réinitialisée au début de chaque itération, seule la dernière référence à $bound est laissé intact, et vous finissez par lier tous vos espaces réservés à celui-ci.

C'est pourquoi votre code fonctionne lorsque $query['where'] contient une seule entrée, mais échoue lorsqu'il en contient plusieurs.

Vous pouvez résoudre le problème de 2 manières :

Passer par référence

foreach($bindings as $placeholder => &$bound) {  //pass $bound as a reference (&)
    $stmt->bindParam($placeholder, $bound);     // bind the variable to the statement
}

Passer par valeur

Utilisez bindValue au lieu de bindParam :

foreach($bindings as $placeholder => $bound) {  
    $stmt->bindValue($placeholder, $bound);     // bind the value to the statement
}