Solo para proporcionar una respuesta, ya que este error es bastante común, aquí hay algunas causas:
1) El :parameter
el nombre no coincide con el enlace por error (¿error tipográfico?). Esto es lo que pasó aquí. Tiene :alias
en la instrucción SQL, pero vinculado :username
. Entonces, cuando se intentó vincular el parámetro, Yii/PDO no pudo encontrar :username
en la declaración sql, lo que significa que era "un parámetro corto" y arrojó un error.
2) Olvidarse por completo de agregar el bindValue()
para un parámetro. Esto es más fácil de hacer en Yii otras construcciones como $critera
, donde tiene una matriz o parámetros ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Conflictos extraños con la paginación y/o clasificación de CDataProvider cuando se usan together
y joins
. No hay una manera específica y fácil de caracterizar esto, pero cuando uso consultas complejas en CDataProviders, he tenido problemas extraños con la caída de parámetros y este error.
Una forma muy útil de solucionar estos problemas en Yii es habilitar el registro de parámetros
en su archivo de configuración. Agregue esto a su db
matriz en su archivo de configuración:
'enableParamLogging'=>true,
Y asegúrese de que CWebLogRoute
la ruta está configurada en su log
sección. Esto imprimirá la consulta que generó el error y todos los parámetros que intentaba enlazar. ¡Muy útil!