Sekedar memberikan jawaban - karena kesalahan ini cukup umum - berikut beberapa penyebabnya:
1) :parameter
nama tidak cocok dengan ikatan karena kesalahan (salah ketik?). Inilah yang terjadi di sini. Dia memiliki :alias
dalam pernyataan SQL, tetapi terikat :username
. Jadi ketika param binding dicoba, Yii/PDO tidak dapat menemukan :username
dalam pernyataan sql, artinya "satu parameter pendek" dan menimbulkan kesalahan.
2) Benar-benar lupa menambahkan bindValue()
untuk sebuah parameter. Ini lebih mudah dilakukan di Yii konstruksi lain seperti $critera
, di mana Anda memiliki larik atau params ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Konflik aneh dengan CDataProvider Pagination dan/atau Sorting saat menggunakan together
dan joins
. Tidak ada cara spesifik dan mudah untuk mengkarakterisasi ini, tetapi ketika menggunakan kueri kompleks di CDataProviders, saya mengalami masalah aneh dengan parameter yang dijatuhkan dan kesalahan ini terjadi.
Salah satu cara yang sangat membantu untuk memecahkan masalah ini di Yii adalah dengan mengaktifkan logging parameter
di file konfigurasi Anda. Tambahkan ini ke db
. Anda array di file konfigurasi Anda:
'enableParamLogging'=>true,
Dan pastikan CWebLogRoute
rute diatur di log
. Anda bagian. Ini akan mencetak kueri yang diberikan dan kesalahan, dan semua parameter yang coba diikat. Sangat membantu!