Apabila cuba melaksanakan pertanyaan MySQL secara serentak, anda mungkin menghadapi ralat "Arahan tidak segerak" . Ini berlaku apabila klien MySQL mengesan bahawa masih terdapat baris untuk diambil daripada pertanyaan yang sedang dijalankan semasa cuba melaksanakan yang baharu.
Klien MySQL menuntut semua baris daripada pertanyaan diambil sebelum memulakan pertanyaan baharu. Ini menghalang rasuah data dan memastikan bahawa keadaan pelanggan kekal disegerakkan dengan pelayan.
1. Pra-Mengambil Keputusan
Anda boleh menggunakan mysqli_store_result() untuk mendapatkan semula semua baris daripada pertanyaan luar. Ini mengarahkan klien MySQL untuk menimbal hasil, membolehkan anda melaksanakan pertanyaan berikutnya tanpa gangguan.
2. Ambil Semua Keputusan
Sebagai alternatif, anda boleh menggunakan mysqli_result::fetch_all(), yang mengembalikan set hasil penuh sebagai tatasusunan PHP. Ini membolehkan anda mengulangi tatasusunan tanpa perlu melakukan sebarang pertanyaan lanjut.
Prosedur tersimpan boleh mengembalikan berbilang set hasil, setiap satu dengan barisnya sendiri. Untuk mengendalikan senario ini, anda harus menggunakan mysqli_multi_query(). Kaedah ini memulakan prosedur tersimpan dan gelung melalui set keputusannya sehingga tiada lagi menggunakan mysqli_next_result().
Dalam senario di mana anda mempunyai data hierarki yang diwakili dalam jadual rata , pertimbangkan untuk menggunakan pendekatan pemodelan data yang berbeza untuk memudahkan bertanya.
Bagi individu yang menggunakan CodeIgnitor 3.0.3 dan mengalami ralat ini, penyelesaian wujud dalam fail mysqli_driver.php. Khususnya, pada baris 262, ubah suai kaedah _execute() seperti berikut:
protected function _execute($sql) { $results = $this->conn_id->query($this->_prep_query($sql)); @mysqli_next_result($this->conn_id); // Fix 'command out of sync' error return $results; }
Atas ialah kandungan terperinci Mengapa Kod MySQLi Saya Menjana Ralat 'Arahan Tidak Segerak'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!