Het probleem hier is dat je parameters bindt met bindParam , die gebruikmaakt van binding door verwijzing. In jouw geval moet je bindValue . gebruiken in plaats daarvan:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Of u kunt uw array rechtstreeks doorgeven aan execute() methode:
$sql->execute( $binders );
Zoals beschreven in de handleiding:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Dus wanneer je foreach-lus eindigt $value heeft waarde van laatste array-item Apple . Dus wanneer execute wordt uitgevoerd, beide :ctid en :p1 waarden worden gelijk aan Apple . Dit is zeker niet wat je wilt)