Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Arahan Tidak Segerak' dalam MySQLi?

Bagaimana untuk Membetulkan Ralat 'Arahan Tidak Segerak' dalam MySQLi?

DDD
DDDasal
2024-12-23 07:08:21925semak imbas

How to Fix the

Menyelesaikan masalah "Commands Out of Sync" Ralat dalam MySQLi

Dalam MySQLi, cuba untuk melaksanakan pertanyaan baharu sebelum mendapatkan semula semua baris daripada yang sedang berjalan pertanyaan boleh membawa kepada ralat "Arahan tidak segerak". Ralat ini menunjukkan ketidakpadanan antara jangkaan klien dan pelayan, di mana pelayan menjangkakan klien mengambil semua baris sebelum mengeluarkan pertanyaan berikutnya.

Memahami Masalah

Untuk memahami punca ralat ini, adalah penting untuk mengetahui bahawa tingkah laku lalai MySQLi adalah untuk mendapatkan hasil baris demi baris menggunakan mysqli_fetch_* fungsi. Apabila pertanyaan baharu dilaksanakan sementara baris daripada pertanyaan sebelumnya masih tersedia, pelanggan dan pelayan tidak segerak.

Penyelesaian Kemungkinan

1. Pra-ambil Keputusan:

Gunakan mysqli_store_result() untuk pra-mengambil semua baris daripada pertanyaan awal. Ini menimbal hasil pada bahagian klien, membolehkan anda melaksanakan pertanyaan berikutnya tanpa menyebabkan isu penyegerakan.

2. Kembalikan Semua Keputusan sebagai Tatasusunan:

Sebagai alternatif, anda boleh menggunakan mysqli_result::fetch_all() untuk mendapatkan semula semua baris sebagai tatasusunan PHP. Pendekatan ini juga menghapuskan keperluan untuk mengambil baris demi baris, menyelesaikan masalah "tidak segerak".

3. Mengendalikan Prosedur Tersimpan:

Prosedur tersimpan boleh mengembalikan beberapa set hasil. Dalam kes sebegini, adalah perlu untuk mengulangi set hasil menggunakan mysqli_multi_query() dan mysqli_next_result(). Ini memastikan bahawa pelanggan mengambil semua baris daripada setiap set hasil sebelum melaksanakan pertanyaan baharu.

Pertimbangan Tambahan

  • Hierarki Data: Jika data anda mewakili hierarki dan anda menggunakan pertanyaan bersarang untuk mendapatkannya, pertimbangkan untuk menstruktur semula anda data untuk membuat pertanyaan lebih cekap.
  • CodeIgnitor Hack: Jika anda menggunakan CodeIgnitor 3.0.3 atau lebih awal, anda boleh menggunakan hack untuk menyelesaikan isu ini. Godam ini melibatkan pengubahsuaian fungsi _execute dalam system/database/drivers/mysqli/mysqli_driver.php untuk memanggil @mysqli_next_result($this->conn_id) selepas setiap pertanyaan.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Arahan Tidak Segerak' dalam MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn