Masalahnya di sini adalah Anda mengikat parameter dengan bindParam
, yang menggunakan pengikatan dengan referensi. Dalam kasus Anda, Anda harus menggunakan bindValue
sebagai gantinya:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Atau Anda dapat meneruskan array Anda langsung ke execute()
metode:
$sql->execute( $binders );
Seperti yang dijelaskan dalam manual:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Jadi ketika loop foreach Anda berakhir $value
memiliki nilai item array terakhir Apple
. Jadi ketika execute
berjalan, keduanya :ctid
dan :p1
nilai menjadi sama dengan Apple
. Tentunya, ini bukan yang Anda inginkan)