Rumah >pangkalan data >tutorial mysql >Mengapa Kod MySQLi Saya Menjana Ralat 'Arahan Tidak Segerak'?

Mengapa Kod MySQLi Saya Menjana Ralat 'Arahan Tidak Segerak'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-24 21:08:25453semak imbas

Why Does My MySQLi Code Generate a

Mengapa mysqli memberikan ralat "Arahan tidak segerak"?

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.

Punca Ralat

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.

Menyelesaikan Isu

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.

Kes Khas: Prosedur Tersimpan

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().

Alternatif Pemodelan Data Hierarki

Dalam senario di mana anda mempunyai data hierarki yang diwakili dalam jadual rata , pertimbangkan untuk menggunakan pendekatan pemodelan data yang berbeza untuk memudahkan bertanya.

CodeIgnitor 3.0.3 Penyelesaian untuk mysqli_next_result()

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!

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