Rumah >pangkalan data >tutorial mysql >Mengapa Menggunakan Parameter Dinamakan Dua Kali Dalam Sisipan PDO...PADA Pertanyaan KEMASKINI KUNCI PENDUA Menyebabkan Ralat 'Nombor Parameter Tidak Sah'?

Mengapa Menggunakan Parameter Dinamakan Dua Kali Dalam Sisipan PDO...PADA Pertanyaan KEMASKINI KUNCI PENDUA Menyebabkan Ralat 'Nombor Parameter Tidak Sah'?

Susan Sarandon
Susan Sarandonasal
2024-12-10 14:57:09665semak imbas

Why Does Using the Same Named Parameter Twice in a PDO INSERT...ON DUPLICATE KEY UPDATE Query Cause a

PHP PDOException: Nombor Parameter Tidak Sah

Masalah:

Apabila membina pertanyaan INSERT dengan klausa ON DUPLICATE KEY UPDATE, menggunakan penanda parameter bernama dua kali dalam kaedah execute() boleh membawa kepada ralat "SQLSTATE[HY093]: Nombor parameter tidak sah".

Penyelesaian:

Untuk menyelesaikan isu ini, tetapkan penanda parameter yang berbeza untuk setiap nilai dalam kaedah execute(). Berikut ialah kod yang dikemas kini:

$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)
);

Penjelasan:

Dokumentasi PDO menyatakan bahawa "Anda tidak boleh menggunakan penanda parameter bernama dengan nama yang sama dua kali dalam pernyataan yang disediakan ." Ini kerana setiap nilai yang dihantar kepada pertanyaan mesti mempunyai penanda parameter yang unik. Dengan memberikan penanda parameter yang berbeza untuk nilai cincang yang dikemas kini (:hash2), isu itu diselesaikan.

Atas ialah kandungan terperinci Mengapa Menggunakan Parameter Dinamakan Dua Kali Dalam Sisipan PDO...PADA Pertanyaan KEMASKINI KUNCI PENDUA Menyebabkan Ralat 'Nombor Parameter Tidak Sah'?. 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