Nur um eine Antwort zu geben - da dieser Fehler ziemlich häufig vorkommt - sind hier einige Ursachen:
1) Der :parameter
Name stimmt aus Versehen nicht mit der Bindung überein (Tippfehler?). Das ist hier passiert. Er hat :alias
in der SQL-Anweisung, aber gebunden :username
. Als also die Parameterbindung versucht wurde, konnte Yii/PDO :username
nicht finden in der SQL-Anweisung, was bedeutet, dass es "ein Parameter zu kurz" war und einen Fehler ausgegeben hat.
2) Völlig vergessen, den bindValue()
hinzuzufügen für einen Parameter. Dies ist einfacher in Yii anderen Konstrukten wie $critera
, wo Sie ein Array oder Parameter haben ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)
).
3) Seltsame Konflikte mit der CDataProvider-Paginierung und/oder -Sortierung, wenn together
verwendet wird und joins
. Es gibt keinen spezifischen, einfachen Weg, dies zu charakterisieren, aber bei der Verwendung komplexer Abfragen in CDataProviders hatte ich seltsame Probleme mit Parametern, die gelöscht wurden und dieser Fehler auftrat.
Eine sehr hilfreiche Möglichkeit, diese Probleme in Yii zu beheben, besteht darin, die Parameterprotokollierung zu aktivieren
in deiner Konfigurationsdatei. Fügen Sie dies zu Ihrer db
hinzu array in Ihrer Konfigurationsdatei:
'enableParamLogging'=>true,
Und stellen Sie sicher, dass CWebLogRoute
Route wird in Ihrem log
eingerichtet Sektion. Dadurch wird die Abfrage ausgegeben, die einen Fehler ausgegeben hat, und alle Parameter, die versucht wurden, zu binden. Super hilfreich!