Bara för att ge ett svar - eftersom det här felet är ganska vanligt - här är några orsaker:
1) :parameter namnet matchar inte bindningen av misstag (stavfel?). Detta är vad som hände här. Han har :alias i SQL-satsen, men bunden :username . Så när parambindningen gjordes kunde Yii/PDO inte hitta :username i sql-satsen, vilket betyder att det var "en parameter kort" och gav ett fel.
2) Glömde helt att lägga till bindValue() för en parameter. Detta är lättare att göra i andra Yii-konstruktioner som $critera , där du har en array eller params ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test) ).
3) Konstiga konflikter med CDataProvider-paginering och/eller sortering när du använder together och joins . Det finns inget specifikt, enkelt sätt att karakterisera detta, men när jag använder komplexa frågor i CDataProviders har jag haft konstiga problem med att parametrar har tappats och det här felet uppstår.
Ett mycket användbart sätt att felsöka dessa problem i Yii är att aktivera parameterloggning
i din inställningsfil. Lägg till detta i din db array i din konfigurationsfil:
'enableParamLogging'=>true,
Och se till att CWebLogRoute rutten ställs in i din log sektion. Detta kommer att skriva ut frågan som gav och fel, och alla parametrar som den försökte binda. Super hjälpsam!