Apabila cuba untuk melaksanakan fungsi add_persist, pembangun mungkin menghadapi ralat "SQLSTATE[HY093]: Nombor parameter tidak sah." Ralat ini berpunca daripada pengikatan parameter yang salah dalam pertanyaan SQL.
Dalam kod yang disediakan, penyataan $sql cuba mengemas kini baris dalam jadual persist dengan melaksanakan perintah INSERT dan ON DUPLICATE KEY UPDATE. Walau bagaimanapun, terdapat percanggahan dalam pengikatan parameter dalam panggilan $stm->execute. Khususnya, parameter :hash muncul dua kali, tetapi menurut dokumentasi PDO, setiap penanda parameter unik mesti diikat sekali sahaja pada nilai.
Untuk menyelesaikan isu ini, pertanyaan $sql harus diubah suai untuk memasukkan yang berbeza penanda parameter untuk setiap nilai yang dihantar, seperti berikut:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2";
Selain itu, panggilan $stm->execute hendaklah termasuk pengikatan untuk kedua-dua parameter :hash dan :hash2:
$stm->execute( array(":user_id" => $user_id, ":hash" => $hash, ":expire" => $future, ":hash2" => $hash) );
Dengan menangani isu pengikatan parameter ini, fungsi add_persist akan melaksanakan pertanyaan SQL dengan betul tanpa mencetuskan ralat "Nombor parameter tidak sah".
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'SQLSTATE[HY093]: Nombor parameter tidak sah\' dalam Kod PDO PHP Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!