Ralat MySQL 2014 berlaku apabila cuba melaksanakan pertanyaan sementara pertanyaan tidak buffer lain masih aktif. Ini boleh berlaku apabila menggunakan pernyataan yang disediakan dengan PDO::ATTR_EMULATE_PREPARES ditetapkan kepada palsu.
Apabila PDO::ATTR_EMULATE_PREPARES adalah benar, PDO akan meniru pernyataan yang disediakan dengan menukarnya kepada pertanyaan SQL biasa. Ini bermakna pelayan akan melaksanakan pertanyaan sekali untuk setiap baris data, membenarkan pertanyaan tidak buffer dilaksanakan serentak.
Walau bagaimanapun, apabila PDO::ATTR_EMULATE_PREPARES palsu, PDO akan menghantar pernyataan yang disediakan kepada pelayan dan tahan kursor terbuka. Ini menghalang pertanyaan lain daripada dilaksanakan sehingga kursor ditutup.
Terdapat beberapa penyelesaian untuk ralat ini:
Dalam coretan kod yang disediakan, terdapat isu apabila pertanyaan $stmt2 dilaksanakan beberapa kali dalam gelung. Ini tidak perlu dan boleh dialihkan ke luar gelung untuk meningkatkan prestasi.
Ia juga disyorkan untuk menggunakan parameter bernama (PDO::bindParam()) dan bukannya parameter kedudukan (PDO::execute() dengan tatasusunan) untuk kenyataan yang disediakan. Ini menjadikan kod lebih mudah dibaca dan mengurangkan risiko suntikan SQL.
Ralat MySQL 2014 boleh disebabkan oleh tidak mengendalikan pertanyaan tidak buffer dengan betul. Dengan menggunakan pertanyaan penimbal, memanggil fetchAll(), atau menutup kursor, ralat ini boleh dielakkan.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat MySQL 2014: \'Tidak dapat melaksanakan pertanyaan semasa pertanyaan tidak buffer lain aktif\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!