bindParam Vyžaduje referenci
Problém je způsoben způsobem, jakým vážete parametry ve smyčce foreach.
foreach($bindings as $placeholder=>$bound){
echo $placeholder . " - " . $bound."<br/>";
$stmt->bindParam($placeholder, $bound);
}
bindParam
vyžaduje referenci. Sváže proměnnou, nikoli hodnotu, s příkazem. Protože proměnná ve smyčce foreach je resetována na začátku každé iterace, pouze poslední odkaz na $bound
zůstane nedotčeno a nakonec k němu připojíte všechny své zástupné symboly.
To je důvod, proč váš kód funguje, když $query['where']
obsahuje pouze jeden záznam, ale selže, pokud obsahuje více než jeden.
Problém můžete vyřešit dvěma způsoby:
Přejít podle reference
foreach($bindings as $placeholder => &$bound) { //pass $bound as a reference (&)
$stmt->bindParam($placeholder, $bound); // bind the variable to the statement
}
Přejít podle hodnoty
Použijte bindValue
místo bindParam
:
foreach($bindings as $placeholder => $bound) {
$stmt->bindValue($placeholder, $bound); // bind the value to the statement
}