Hvis du deaktiverer standardindstillingen for PDO::ATTR_EMULATE_PREPARES
, så vil det virke. Jeg har lige fundet ud af, at den indstilling er slået til som standard for mysql, hvilket betyder, at du faktisk aldrig bruger forberedte sætninger, php opretter internt dynamisk sql for dig, citerer værdierne for dig og erstatter pladsholderne. Ja, en stor wtf.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
Forberedelserne emuleres som standard på grund af ydeevneårsager.
Se også PDO MySQL:Brug PDO::ATTR_EMULATE_PREPARES eller ej?