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
Lepaskan: 2024-12-25 20:48:11
asal
159 orang telah melayarinya

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();
Salin selepas log masuk

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);
Salin selepas log masuk

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,
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan