Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Saya Mendapat Ralat 'Nombor Parameter Tidak Sah' SQLSTATE[HY093] dalam Yii dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Saya Mendapat Ralat 'Nombor Parameter Tidak Sah' SQLSTATE[HY093] dalam Yii dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2024-12-25 20:48:11207semak imbas

Why Am I Getting the SQLSTATE[HY093]

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]":

  • Melupakan untuk menambah bindValue() untuk parameter yang ditentukan.
  • Aksara tidak sah dalam ruang letak name.
  • Konflik antara Penomboran CDataProvider dan Isih apabila menggunakan cantuman dalam pertanyaan kompleks.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn