Problem polega na tym, że wiążesz parametry za pomocą bindParam
, który używa wiązania przez odwołanie. W twoim przypadku powinieneś użyć bindValue
zamiast tego:
foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Lub możesz przekazać swoją tablicę bezpośrednio do execute()
metoda:
$sql->execute( $binders );
Jak opisano w instrukcji:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Więc kiedy pętla foreach kończy się $value
ma wartość ostatniego elementu tablicy Apple
. Więc kiedy execute
działa, oba :ctid
i :p1
wartości stają się równe Apple
. Na pewno nie tego chcesz)