bindParam Benötigt eine Referenz
Das Problem wird durch die Art und Weise verursacht, wie Sie Parameter in der foreach-Schleife binden.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
erfordert eine Referenz. Es bindet die Variable, nicht den Wert, an die Anweisung. Da die Variable in einer foreach-Schleife zu Beginn jeder Iteration zurückgesetzt wird, wird nur der letzte Verweis auf $bound
bleibt intakt, und Sie binden am Ende alle Ihre Platzhalter daran.
Deshalb funktioniert Ihr Code, wenn $query['where']
enthält nur einen Eintrag, schlägt aber fehl, wenn es mehr als einen enthält.
Sie können das Problem auf 2 Arten lösen:
Als Referenz übergeben
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Wertübergabe
Verwenden Sie bindValue
statt bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}