Just to provide an answer - because this error is pretty common - here are a few causes:
:parameter name does not match the bind by mistake (typo?). This is what happened here. He has
:alias in the SQL statement, but bound
:username. So when the param binding was attempted, Yii/PDO could not find
:username in the sql statement, meaning it was "one parameter short" and threw an error.
2) Completely forgetting to add the
bindValue() for a parameter. This is easier to do in Yii other constructs like
$critera, where you have an array or params (
$criteria->params = array(':bind1'=>'test', ':bind2'=>'test)).
3) Weird conflicts with CDataProvider Pagination and/or Sorting when using
joins. There is no specific, easy way to characterize this, but when using complex queries in CDataProviders I have had weird issues with parameters getting dropped and this error occurring.
One very helpful way to troubleshoot these issues in Yii is to enable parameter logging in your config file. Add this to your
db array in your config file:
And make sure the
CWebLogRoute route is set up in your
log section. This will print out the query that gave and error, and all of the parameters it was attempting to bind. Super helpful!