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)