Il problema qui è che stai vincolando i parametri con bindParam
, che utilizza l'associazione per riferimento. Nel tuo caso dovresti usare bindValue
invece:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Oppure puoi passare il tuo array direttamente a execute()
metodo:
$sql->execute( $binders );
Come descritto nel manuale:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Quindi, quando il tuo ciclo foreach termina $value
ha il valore dell'ultimo elemento dell'array Apple
. Quindi, quando execute
viene eseguito, entrambi :ctid
e :p1
i valori stanno diventando uguali a Apple
. Sicuramente, questo non è quello che vuoi)