Arahan PHP Habis Penyegerakan Ralat: Punca dan Penyelesaian
Apabila bekerja dengan PHP dan MySQLi untuk mendapatkan semula data daripada pangkalan data menggunakan pernyataan yang disediakan, anda mungkin menghadapi ralat "Arahan tidak segerak, anda tidak boleh menjalankan perintah sekarang". Isu ini biasanya timbul apabila cuba melaksanakan berbilang pernyataan yang disediakan dalam skrip PHP yang sama.
Ralat berlaku kerana kaedah query() MySQLi, apabila digunakan dengan pilihan MYSQLI_USE_RESULT, meninggalkan panggilan berikutnya dalam keadaan "basi". Untuk menyelesaikan masalah ini, adalah penting untuk menyelesaikan pemprosesan keputusan pernyataan pertama dengan betul sebelum meneruskan ke yang seterusnya.
Satu penyelesaian melibatkan panggilan mysqli_free_result() selepas setiap set keputusan telah diambil. Fungsi ini mengeluarkan sebarang hasil yang belum selesai daripada penimbal, membenarkan penyataan berikutnya berjalan dengan jayanya.
Satu lagi pendekatan berkesan ialah menggunakan mysqli::next_result(). Selepas melaksanakan setiap pernyataan yang disediakan, panggil next_result() untuk memajukan penunjuk dalaman dalam MySQLi, memastikan penyegerakan yang betul untuk pernyataan seterusnya. Ini amat relevan apabila bekerja dengan prosedur tersimpan atau berbilang set hasil.
Berikut ialah contoh yang menunjukkan penggunaan next_result():
<?php $mysqli = new mysqli('localhost', 'user', 'password', 'database'); // Prepare and execute first statement $stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt1->bind_param('s', $username); $stmt1->execute(); $stmt1->store_result(); // Free the result set and advance to the next result $stmt1->free_result(); $mysqli->next_result(); // Prepare and execute second statement $stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?"); $stmt2->bind_param('i', $userId); $stmt2->execute(); $stmt2->store_result(); // Bind results and fetch data $stmt2->bind_result($orderId, $productId, $quantity); while ($stmt2->fetch()) { // Do something with the fetched data } $stmt2->free_result(); $mysqli->close(); ?>
Dengan melaksanakan strategi ini, anda boleh mengelakkan " Arahan tidak segerak" ralat dan pastikan pelaksanaan lancar berbilang pernyataan yang disediakan dalam skrip PHP anda.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Arahan tidak segerak\' PHP Apabila Menggunakan Penyata Disediakan MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!