Om du stänger av standardinställningen för PDO::ATTR_EMULATE_PREPARES
, då kommer det att fungera. Jag fick precis reda på att den inställningen är på som standard för mysql, vilket betyder att du faktiskt aldrig använder förberedda satser, php skapar internt dynamisk sql för dig, citerar värdena för dig och ersätter platshållarna. Ja, en stor wtf.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
Förberedelserna emuleras som standard på grund av prestandaskäl.
Se även PDO MySQL:Använd PDO::ATTR_EMULATE_PREPARES eller inte?