bindParam Kräver en referens
Problemet orsakas av hur du binder parametrar i foreach loop.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
kräver en referens. Den binder variabeln, inte värdet, till påståendet. Eftersom variabeln i en foreach loop återställs i början av varje iteration, är endast den sista referensen till $bound
lämnas intakt och det slutar med att du binder alla dina platshållare till det.
Det är därför din kod fungerar när $query['where']
innehåller bara en post, men misslyckas när den innehåller mer än en.
Du kan lösa problemet på två sätt:
Visa referens
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Övergå värde
Använd bindValue
istället för bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}