Das Problem dabei ist, dass Sie Parameter mit bindParam
binden , die die Bindung durch Verweis verwendet. In Ihrem Fall sollten Sie bindValue
verwenden stattdessen:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Oder Sie können Ihr Array direkt an execute()
übergeben Methode:
$sql->execute( $binders );
Wie im Handbuch beschrieben:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Wenn also Ihre foreach-Schleife $value
endet hat den Wert des letzten Array-Elements Apple
. Also beim execute
läuft, beide :ctid
und :p1
Werte werden gleich Apple
. Das ist sicherlich nicht das, was Sie wollen)