ここでの問題は、パラメータをbindParamでバインドすることです。 、参照によるバインディングを使用します。あなたの場合、bindValueを使用する必要があります 代わりに:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
または、配列をexecute()に直接渡すこともできます 方法:
$sql->execute( $binders );
マニュアルで説明されているように:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
したがって、foreachループが終了すると$value 最後の配列アイテムAppleの値があります 。したがって、execute 実行、両方:ctid および:p1 値はAppleと等しくなりつつあります 。確かに、これはあなたが望むものではありません)