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!