Pengecualian PDO: Nombor Parameter Tidak Sah dalam PHP
Menghadapi ralat "SQLSTATE[HY093]: Nombor parameter tidak sah" apabila cuba menggunakan PHP PDO? Punca asas mungkin berkaitan dengan penggunaan parameter dalam pernyataan yang disediakan.
Perihalan Masalah:
Dalam coretan kod yang disediakan:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash";
Ada penanda parameter ": hash2" tiada dalam klausa KEMASKINI. Percanggahan ini membawa kepada pengecualian PDO kerana PDO memerlukan penanda parameter unik untuk setiap nilai untuk diikat dalam pernyataan.
Penyelesaian:
Laraskan pertanyaan SQL pernyataan yang disediakan kepada yang berikut:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
Sehubungan itu, ubah suai pernyataan execute() untuk memasukkan Penanda parameter ":hash2":
$stm->execute( array( ":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash ) );
Latar Belakang:
Kaedah prepare() PDO memerlukan penanda parameter unik untuk mengikat nilai apabila memanggil execute(). Penggunaan penanda parameter berulang adalah tidak dibenarkan dan memberikan berbilang nilai kepada parameter yang sama tidak disokong dalam klausa seperti klausa "IN()".
Atas ialah kandungan terperinci Mengapa Penyata PHP PDO Saya Disediakan Membuang 'Nombor Parameter Tidak Sah'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!