Mengapa MySQLi memberikan ralat "Arahan tidak segerak"?
Pelanggan MySQL tidak membenarkan anda melaksanakan pertanyaan baharu sementara masih terdapat baris yang perlu diambil daripada pertanyaan yang sedang berjalan. Rujuk kepada dokumen MySQL tentang ralat biasa untuk mendapatkan maklumat lanjut tentang "Arahan tidak segerak".
Penyelesaian:
Gunakan mysqli_store_result() untuk pra-mengambil semua baris daripada pertanyaan luar. Ini akan menampannya dalam klien MySQL, jadi pelayan percaya bahawa apl anda telah mengambil keseluruhan set hasil. Anda kemudiannya boleh melaksanakan lebih banyak pertanyaan, walaupun dalam gelung pengambilan baris daripada set hasil luar yang kini ditimbal.
Sebagai alternatif, gunakan mysqli_result::fetch_all(), yang mengembalikan set hasil penuh sebagai tatasusunan PHP. Anda kemudiannya boleh mengulangi tatasusunan itu.
Kes Khas untuk Prosedur Tersimpan:
Prosedur tersimpan boleh mengembalikan berbilang set hasil, setiap satu dengan set barisnya sendiri. Oleh itu, anda perlu menggunakan mysqli_multi_query() dan gelung sehingga mysqli_next_result() tidak lagi mengembalikan set hasil tambahan. Ini diperlukan untuk memenuhi protokol MySQL, walaupun prosedur tersimpan anda hanya mempunyai set hasil tunggal.
Nota:
Pertanyaan bersarang sering digunakan untuk mewakili hierarki dalam data, tetapi kaedah alternatif dengan pertanyaan yang lebih mudah mungkin lebih disukai. Pertimbangkan untuk menyimpan data anda secara berbeza untuk membuat pertanyaan yang lebih mudah.
Atas ialah kandungan terperinci Mengapa saya Mendapat Ralat 'Arahan daripada Penyegerakan' dalam MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!