Chỉ để cung cấp câu trả lời - vì lỗi này khá phổ biến - đây là một vài nguyên nhân:
1) Tham số :parameter
tên không khớp với ràng buộc do nhầm lẫn (lỗi đánh máy?). Đây là những gì đã xảy ra ở đây. Anh ấy có :alias
trong câu lệnh SQL, nhưng bị ràng buộc :username
. Vì vậy, khi liên kết tham số được thử, Yii / PDO không thể tìm thấy :username
trong câu lệnh sql, nghĩa là "thiếu một tham số" và đã xảy ra lỗi.
2) Hoàn toàn quên thêm bindValue()
cho một tham số. Điều này dễ thực hiện hơn trong Yii các cấu trúc khác như $critera
, nơi bạn có một mảng hoặc tham số ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Xung đột kỳ lạ với CDataProvider Pagination và / hoặc Sắp xếp khi sử dụng together
và joins
. Không có cách cụ thể và dễ dàng để mô tả điều này, nhưng khi sử dụng các truy vấn phức tạp trong CDataProviders, tôi đã gặp vấn đề kỳ lạ với việc các thông số bị giảm và lỗi này xảy ra.
Một cách rất hữu ích để khắc phục những sự cố này trong Yii là bật ghi thông số
trong tệp cấu hình của bạn. Thêm cái này vào db
của bạn mảng trong tệp cấu hình của bạn:
'enableParamLogging'=>true,
Và đảm bảo rằng CWebLogRoute
tuyến đường được thiết lập trong log
của bạn tiết diện. Thao tác này sẽ in ra truy vấn đã đưa ra và lỗi cũng như tất cả các tham số mà nó đang cố gắng liên kết. Rất hữu ích!