Menyelesaikan masalah Ralat "Perintah tidak segerak" MySQLi
Ralat "Perintah tidak segerak" MySQLi berlaku apabila melaksanakan pertanyaan berikutnya sebelum mengambil semua baris daripada pertanyaan sebelumnya. Untuk menyelesaikan masalah ini, pastikan anda mengambil semua baris sebelum melaksanakan pertanyaan tambahan.
Punca Ralat:
Pelanggan MySQL melarang melaksanakan pertanyaan baharu sementara baris kekal tidak diambil daripada pertanyaan berterusan. Ini adalah untuk mengekalkan integriti data dan mengelakkan konflik antara berbilang set hasil.
Penyelesaian Kemungkinan:
1. Pra-ambil Baris Menggunakan mysqli_store_result() atau mysqli_fetch_all()
Menggunakan mysqli_store_result():
$result = mysqli_store_result($db);
Menggunakan mysqli_fetch_all():
$result = mysqli_query($db, $sql)->fetch_all();
2. Gunakan mysqli_next_result() untuk Prosedur Tersimpan
Jika anda melaksanakan prosedur tersimpan, ia mungkin mengembalikan beberapa set hasil. Dalam kes sedemikian, gunakan mysqli_next_result() untuk melelakan dan melengkapkan semua set hasil sebelum melaksanakan pertanyaan tambahan.
while ($result = mysqli_next_result($db)) { // process the result set }
3. Storan Data Alternatif untuk Hierarki
Pertimbangkan untuk menyimpan data hierarki secara berbeza untuk memudahkan pertanyaan. Terokai pelbagai model pangkalan data, seperti senarai bersebelahan atau model set bersarang, untuk mengoptimumkan struktur data dan meningkatkan kecekapan pertanyaan.
Nota Tambahan:
Untuk pengguna CodeIgnitor, anda boleh menghadapi ralat ini kerana isu yang diketahui dalam pemacu mysqli. Untuk menyelesaikannya, ubah suai fungsi _execute() pemandu 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 Bagaimana untuk Membetulkan Ralat 'Perintah tidak segerak' MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!