SQLSTATE[HY093]: Memahami dan Menyelesaikan Ralat "Nombor Parameter Tidak Sah" dalam SQL
Apabila bekerja dengan pangkalan data, anda mungkin menghadapi ralat mesej seperti "SQLSTATE[HY093]: Nombor parameter tidak sah: parameter tidak ditakrifkan." Ralat ini menunjukkan masalah dengan cara parameter terikat pada pernyataan SQL.
Dalam konteks corak rekod aktif Yii dan DAO (Objek Akses Data), mari kita pertimbangkan senario tertentu di mana ralat ini timbul.
Andaikan anda mempunyai kod berikut:
$model_person = new TempPerson(); $model = $model_person->find('alias=:alias', array(':alias' => $_GET['alias'])); $connection = Yii::app()->db2; $sql = "INSERT INTO users (username, password, ssn, surname, firstname, email, city, country) VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country)"; $command = $connection->createCommand($sql); $command->bindValue(":username", $model->alias); $command->bindValue(":password", substr($model->ssn, -4, 4)); $command->bindValue(":ssn", $model->ssn); $command->bindValue(":surname", $model->lastName); $command->bindValue(":firstname", $model->firstName); $command->bindValue(":email", $model->email); $command->bindValue(":city", $model->placeOfBirth); $command->bindValue(":country", $model->placeOfBirth); $command->execute();
Kod ini cuba memasukkan rekod ke dalam jadual "pengguna" berdasarkan atribut objek $model. Walau bagaimanapun, pertanyaan yang dijana dan dilog masuk dalam log aplikasi muncul seperti berikut:
INSERT INTO users (username, password, ssn, surname, firstname, email, city, country) VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country);
Bandingkan pertanyaan di atas dengan nama parameter dalam panggilan bindValue(). Perhatikan bahawa nama parameter untuk mengikat nilai nama pengguna ialah ": nama pengguna," bukan ": alias" seperti yang dinyatakan dalam pernyataan SQL. Yii mentafsirkan percanggahan ini sebagai "satu parameter pendek," yang membawa kepada ralat "SQLSTATE[HY093]".
Untuk menyelesaikan isu ini, pastikan nama parameter dalam pernyataan SQL sepadan dengan yang digunakan dalam bindValue () kaedah. Dalam kes ini, tukar nama parameter dalam pernyataan SQL kepada ":nama pengguna."
Berikut ialah beberapa punca biasa tambahan ralat "SQLSTATE[HY093]":
Untuk menyelesaikan masalah ini dengan berkesan, dayakan pengelogan parameter dalam fail konfigurasi Yii anda dengan menambahkan:
'enableParamLogging' => true,
kepada tatasusunan DB. Ini akan memberikan maklumat terperinci tentang pertanyaan SQL dan parameter terikat, menjadikannya lebih mudah untuk mengenal pasti dan membetulkan ralat.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Nombor Parameter Tidak Sah' SQLSTATE[HY093] dalam Yii dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!