bindParam Richiede un riferimento
Il problema è causato dal modo in cui leghi i parametri nel ciclo foreach.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
richiede un riferimento. Associa la variabile, non il valore, all'istruzione. Poiché la variabile in un ciclo foreach viene reimpostata all'inizio di ogni iterazione, solo l'ultimo riferimento a $bound
viene lasciato intatto e finisci per legare tutti i tuoi segnaposto ad esso.
Ecco perché il tuo codice funziona quando $query['where']
contiene solo una voce, ma non riesce quando ne contiene più di una.
Puoi risolvere il problema in 2 modi:
Passa per riferimento
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Passa per valore
Usa bindValue
invece di bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}