sql >> Databasteknik >  >> RDS >> Mysql

Ogiltigt parameternummer:parametern definierades inte. Infogar data

Bara för att ge ett svar - eftersom det här felet är ganska vanligt - här är några orsaker:

1) :parameter namnet matchar inte bindningen av misstag (stavfel?). Detta är vad som hände här. Han har :alias i SQL-satsen, men bunden :username . Så när parambindningen gjordes kunde Yii/PDO inte hitta :username i sql-satsen, vilket betyder att det var "en parameter kort" och gav ett fel.

2) Glömde helt att lägga till bindValue() för en parameter. Detta är lättare att göra i andra Yii-konstruktioner som $critera , där du har en array eller params ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test) ).

3) Konstiga konflikter med CDataProvider-paginering och/eller sortering när du använder together och joins . Det finns inget specifikt, enkelt sätt att karakterisera detta, men när jag använder komplexa frågor i CDataProviders har jag haft konstiga problem med att parametrar har tappats och det här felet uppstår.

Ett mycket användbart sätt att felsöka dessa problem i Yii är att aktivera parameterloggning i din inställningsfil. Lägg till detta i din db array i din konfigurationsfil:

'enableParamLogging'=>true,

Och se till att CWebLogRoute rutten ställs in i din log sektion. Detta kommer att skriva ut frågan som gav och fel, och alla parametrar som den försökte binda. Super hjälpsam!



  1. SQL flera kolumner i IN-sats

  2. PostgreSQL :cast sträng till datum DD/MM/ÅÅÅÅ

  3. Ändra tidszonförskjutningen på ett datumtidsförskjutningsvärde i SQL Server (T-SQL)

  4. Introduktion till SQL Server Identity