O problema aqui é que você vincula parâmetros com
bindParam
, que usa vinculação por referência. No seu caso, você deve usar bindValue
em vez de:foreach( $binders as $key => $value ) {
$sql->bindValue( $key, $value );
}
Ou você pode passar seu array diretamente para
execute()
método:$sql->execute( $binders );
Conforme descrito no manual:
the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.
Então, quando seu loop foreach termina
$value
tem o valor do último item do array Apple
. Então, quando execute
roda, ambos :ctid
e :p1
os valores estão se tornando iguais a Apple
. Certamente, isso não é o que você quer)