Chỉnh sửa mới nhất của bạn đã làm cho câu hỏi trở nên rất rõ ràng, vì vậy tôi sẽ cố gắng trả lời:nguyên nhân của sự khác biệt này là trình giữ chỗ.
Như được ghi lại tại đây , trình giữ chỗ chỉ có thể được sử dụng ở một số vị trí nhất định trong truy vấn. Cụ thể:
Bây giờ bạn có thể nhận thấy rằng SELECT ? as x
chuẩn bị tốt, nhưng không phải SELECT nr.x FROM (SELECT ? AS x) AS nr
. Tại sao vậy? Điều này được giải thích tốt nhất bởi một tác giả ẩn danh trên tài liệu PHP
, vậy hãy để tôi sao chép / dán:
Nói một cách đơn giản:bởi vì bạn đang sử dụng trình giữ chỗ trong truy vấn con trong FROM
, MySQL không thể tính toán kế hoạch thực thi của truy vấn.
Nói cách khác, vì truy vấn của bạn sẽ luôn thay đổi, nên không có "mẫu" nào có thể được chuẩn bị cho nó.
Do đó, nếu bạn thực sự muốn sử dụng truy vấn này, bạn cần sử dụng truy vấn bình thường (không chuẩn bị) hoặc bật lại các câu lệnh chuẩn bị được mô phỏng của PDO.
Điều đó đang được nói, xin vui lòng, hãy xem xét các lựa chọn thay thế khác nhau được cung cấp trong phần nhận xét. Có nhiều giải pháp tốt hơn cho những gì bạn đang cố gắng đạt được.