Hasil edit terakhir Anda membuat pertanyaan menjadi sangat jelas, jadi saya akan mencoba menjawab:penyebab perbedaan ini adalah placeholder.
Seperti yang didokumentasikan di sini , placeholder hanya dapat digunakan di tempat tertentu dalam kueri. Khususnya:
Sekarang Anda mungkin telah memperhatikan bahwa SELECT ? as x
mempersiapkan dengan baik, tetapi tidak SELECT nr.x FROM (SELECT ? AS x) AS nr
. Mengapa demikian? Hal ini paling baik dijelaskan oleh seorang penulis anonim di dokumen PHP
, jadi izinkan saya menyalin/menempel:
Sederhananya:karena Anda menggunakan placeholder di subquery di FROM
klausa, MySQL tidak dapat menghitung rencana eksekusi kueri.
Dengan kata lain, karena kueri Anda akan selalu berubah, tidak ada "templat" yang dapat disiapkan untuk itu.
Oleh karena itu, jika Anda benar-benar ingin menggunakan kueri ini, Anda perlu menggunakan kueri normal (tidak disiapkan), atau mengaktifkan kembali pernyataan siap yang ditiru PDO.
Karena itu, tolong, pertimbangkan berbagai alternatif yang ditawarkan di bagian komentar. Ada banyak solusi yang lebih baik untuk apa yang ingin Anda capai.