Se disattivi l'impostazione predefinita di PDO::ATTR_EMULATE_PREPARES
, allora funzionerà. Ho appena scoperto che quell'impostazione è attiva per impostazione predefinita per mysql, il che significa che non usi mai effettivamente istruzioni preparate, php crea internamente sql dinamico per te, citando i valori per te e sostituendo i segnaposto. Sì, un grande wtf.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
Le preparazioni vengono emulate per impostazione predefinita per motivi di prestazioni.
Vedi anche PDO MySQL:Usa PDO::ATTR_EMULATE_PREPARES o no?