Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Número de parâmetro inválido:o parâmetro não foi definido Inserindo dados


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!