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!