Om een antwoord te geven - omdat deze fout vrij vaak voorkomt - zijn hier een paar oorzaken:
1) De :parameter
naam komt per ongeluk niet overeen met de binding (typfout?). Dit is wat hier gebeurde. Hij heeft :alias
in de SQL-instructie, maar gebonden :username
. Dus toen de parambinding werd geprobeerd, kon Yii/PDO :username
niet vinden in de sql-instructie, wat betekent dat het "één parameter kort" was en een fout veroorzaakte.
2) Helemaal vergeten de bindValue()
. toe te voegen voor een parameter. Dit is gemakkelijker te doen in Yii andere constructies zoals $critera
, waar je een array of params hebt ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Vreemde conflicten met CDataProvider paginering en/of sortering bij gebruik together
en joins
. Er is geen specifieke, gemakkelijke manier om dit te karakteriseren, maar bij het gebruik van complexe query's in CDataProviders heb ik rare problemen gehad met het wegvallen van parameters en het optreden van deze fout.
Een zeer handige manier om deze problemen in Yii op te lossen, is door parameterregistratie in te schakelen
in je configuratiebestand. Voeg dit toe aan uw db
array in je configuratiebestand:
'enableParamLogging'=>true,
En zorg ervoor dat de CWebLogRoute
route is ingesteld in je log
sectie. Hiermee wordt de query afgedrukt die gaf en fout, en alle parameters die het probeerde te binden. Super handig!