Rumah >pangkalan data >tutorial mysql >Mengapakah PDO Membuang 'SQLSTATE[HY093]: Nombor Parameter Tidak Sah' dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah PDO Membuang 'SQLSTATE[HY093]: Nombor Parameter Tidak Sah' dan Bagaimana Saya Boleh Membetulkannya?

Barbara Streisand
Barbara Streisandasal
2024-12-11 10:17:10483semak imbas

Why Does PDO Throw

SQLSTATE[HY093]: Nombor Parameter Tidak Sah dengan PDO

Apabila cuba untuk melaksanakan fungsi, mesej ralat menunjukkan "SQLSTATE[HY093] : Nombor parameter tidak sah" mungkin muncul. Isu ini timbul disebabkan oleh salah faham kelakuan parameter bernama dengan PDO.

Fungsi yang anda berikan termasuk kod berikut:

$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";

Apabila mentakrifkan parameter bernama untuk pernyataan SQL, ia adalah penting untuk memastikan setiap penanda parameter unik digunakan sekali sahaja. Walau bagaimanapun, dalam kes ini, ":hash" digunakan dua kali, yang mengakibatkan ralat.

Untuk menyelesaikan isu ini, anda perlu menetapkan penanda parameter unik untuk setiap nilai yang anda hantar ke pernyataan semasa memanggil PDOStatement ::execute():

$sql = "INSERT INTO persist (user_id, hash, expire)
        VALUES (:user_id, :hash, :expire)
        ON DUPLICATE KEY UPDATE hash=:hash2";
$stm->execute(
    array(":user_id" => $user_id, 
          ":hash" => $hash, 
          ":expire" => $future,
          ":hash2" => $hash)
);

Pertanyaan SQL yang terhasil akan berjaya memasukkan atau mengemas kini jadual "berterusan" tanpa menemui nombor parameter yang tidak sah ralat.

Atas ialah kandungan terperinci Mengapakah PDO Membuang 'SQLSTATE[HY093]: Nombor Parameter Tidak Sah' dan Bagaimana Saya Boleh 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