El problema aquí es que vincula parámetros con bindParam
, que utiliza el enlace por referencia. En tu caso deberías usar bindValue
en cambio:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
O puede pasar su matriz directamente a execute()
método:
$sql->execute( $binders );
Como se describe en el manual:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Entonces, cuando tu ciclo foreach finaliza $value
tiene el valor del último elemento de la matriz Apple
. Así que cuando execute
se ejecuta, tanto :ctid
y :p1
los valores se vuelven iguales a Apple
. Seguramente, esto no es lo que quieres)