bindParam Kræver en reference
Problemet er forårsaget af den måde, du binder parametre i foreach loop.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
kræver en reference. Det binder variablen, ikke værdien, til udsagnet. Da variablen i en foreach loop nulstilles ved starten af hver iteration, er det kun den sidste reference til $bound
efterlades intakt, og du ender med at binde alle dine pladsholdere til det.
Det er derfor din kode virker, når $query['where']
indeholder kun én post, men mislykkes, når den indeholder mere end én.
Du kan løse problemet på 2 måder:
Bestå ved reference
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Forbigå værdi
Brug bindValue
i stedet for bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}