Bare for at give et svar - fordi denne fejl er ret almindelig - her er et par årsager:
1) :parameter
navn matcher ikke bindingen ved en fejl (tastefejl?). Det er, hvad der skete her. Han har :alias
i SQL-sætningen, men bundet :username
. Så da parambindingen blev forsøgt, kunne Yii/PDO ikke finde :username
i sql-sætningen, hvilket betyder, at det var "en parameter kort" og gav en fejl.
2) Glemte fuldstændig at tilføje bindValue()
for en parameter. Dette er nemmere at gøre i Yii andre konstruktioner som $critera
, hvor du har et array eller params ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Mærkelige konflikter med CDataProvider-sideinddeling og/eller sortering, når du bruger together
og joins
. Der er ingen specifik, nem måde at karakterisere dette på, men når jeg bruger komplekse forespørgsler i CDataProviders, har jeg haft mærkelige problemer med, at parametre blev slettet, og denne fejl opstod.
En meget nyttig måde at fejlfinde disse problemer på i Yii er at aktivere parameterlogning
i din konfigurationsfil. Føj dette til din db
array i din konfigurationsfil:
'enableParamLogging'=>true,
Og sørg for, at CWebLogRoute
rute er sat op i din log
afsnit. Dette vil udskrive forespørgslen, der gav og fejl, og alle de parametre, den forsøgte at binde. Super hjælpsom!