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!