Nếu bạn tắt cài đặt mặc định của PDO::ATTR_EMULATE_PREPARES
, sau đó nó sẽ hoạt động. Tôi vừa phát hiện ra rằng cài đặt đó được bật theo mặc định cho mysql, có nghĩa là bạn không bao giờ thực sự sử dụng các câu lệnh đã chuẩn bị sẵn, php nội bộ tạo sql động cho bạn, trích dẫn các giá trị cho bạn và thay thế các trình giữ chỗ. Ya, một wtf lớn.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5)); //works!
Việc chuẩn bị được mô phỏng theo mặc định vì lý do hiệu suất.
Đồng thời xem PDO MySQL:Sử dụng PDO ::ATTR_EMULATE_PREPARES hay không?