Apenas para fornecer uma resposta - porque esse erro é bastante comum - aqui estão algumas causas:
1) O
:parameter
name não corresponde ao bind por engano (erro?). Isto é o que aconteceu aqui. Ele tem :alias
na instrução SQL, mas vinculado :username
. Então, quando a ligação do parâmetro foi tentada, o Yii/PDO não pôde encontrar :username
na instrução sql, significando que era "um parâmetro curto" e gerou um erro. 2) Esquecendo completamente de adicionar o
bindValue()
para um parâmetro. Isso é mais fácil de fazer em outras construções do Yii como $critera
, onde você tem um array ou params ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
). 3) Conflitos estranhos com CDataProvider Paginação e/ou Classificação ao usar
together
e joins
. Não há uma maneira específica e fácil de caracterizar isso, mas ao usar consultas complexas em CDataProviders, tive problemas estranhos com parâmetros sendo descartados e esse erro ocorrendo. Uma maneira muito útil de solucionar esses problemas no Yii é habilitar o registro de parâmetros em seu arquivo de configuração. Adicione isso ao seu
db
array em seu arquivo de configuração:'enableParamLogging'=>true,
E certifique-se de que o
CWebLogRoute
a rota está configurada em seu log
seção. Isso imprimirá a consulta que deu um erro e todos os parâmetros que ele estava tentando vincular. Super útil!