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
}