Pokud vypnete výchozí nastavení PDO::ATTR_EMULATE_PREPARES
, pak to bude fungovat. Právě jsem zjistil, že toto nastavení je ve výchozím nastavení zapnuto pro mysql, což znamená, že ve skutečnosti nikdy nepoužíváte připravené příkazy, php pro vás interně vytvoří dynamické sql, které za vás uvede hodnoty a nahradí zástupné symboly. Ano, hlavní wtf.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
Přípravky jsou z důvodu výkonu ve výchozím nastavení emulovány.
Viz také PDO MySQL:Použít PDO::ATTR_EMULATE_PREPARES nebo ne?