Rumah  >  Artikel  >  pangkalan data  >  PHP MySQLi Ralat \"Arahan Tidak Segerak\": Bagaimana untuk Membetulkannya?

PHP MySQLi Ralat \"Arahan Tidak Segerak\": Bagaimana untuk Membetulkannya?

Barbara Streisand
Barbara Streisandasal
2024-11-18 10:03:02921semak imbas

PHP MySQLi

Arahan PHP Tidak Disegerakkan: Pemahaman dan Penyelesaian

Apabila melaksanakan berbilang kenyataan yang disediakan dalam PHP/MySQLi, anda mungkin menghadapi ralat "Perintah tidak segerak". Ini timbul daripada ketidakpadanan antara bilangan pernyataan yang dilaksanakan dan bilangan hasil yang sedang diproses. Untuk menangani isu ini, pertimbangkan cerapan dan penyelesaian berikut:

Punca Ralat

Ralat "Out of Sync" berlaku apabila klien MySQL menerima lebih banyak data daripada yang dijangkakan untuk pernyataan tertentu. Ini berlaku apabila menggunakan mysqli::query dengan bendera MYSQLI_USE_RESULT. Bendera ini mengarahkan MySQL untuk tidak menimbal hasil sepenuhnya, menyebabkan perintah berikutnya menjadi tidak segerak.

Penjelasan Coretan Kod

Dalam kod yang anda sediakan, dua pernyataan yang disediakan digunakan untuk mendapatkan data daripada pangkalan data. Pernyataan pertama mendapatkan semula maklumat pengguna, manakala yang kedua mendapatkan kembali keistimewaan. Walau bagaimanapun, anda menghadapi ralat semasa melaksanakan pernyataan kedua.

Resolusi

Untuk menyelesaikan ralat, anda mesti membebaskan keputusan pernyataan pertama sebelum melaksanakan yang kedua. Ini dicapai dengan memanggil fungsi mysqli_stmt->free_result(). Selain itu, menggunakan mysqli->next_result() selepas setiap pertanyaan memastikan bahawa sebarang hasil tambahan telah diproses.

Berikut ialah contoh cara menyelesaikan isu:

    $stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $loweredEmail);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $mysqli->next_result(); // Ensure no stray results are present

    $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
    $stmt1->bind_param('s', $user_id);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($privileges);
    $stmt1->fetch();

Petua Tambahan

  • Gunakan objek berasingan untuk setiap pernyataan yang disediakan untuk mengelakkan kekeliruan.
  • Sentiasa semak ralat selepas melaksanakan kenyataan menggunakan mysqli_stmt->error.
  • Elakkan menggunakan MYSQLI_USE_RESES perlu, kerana ia boleh membawa kepada isu penyegerakan.

Atas ialah kandungan terperinci PHP MySQLi Ralat \"Arahan Tidak Segerak\": Bagaimana untuk Membetulkannya?. 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