sql >> Database >  >> RDS >> Mysql

Ongeldig parameternummer:parameter is niet gedefinieerd Gegevens invoegen

Om een ​​antwoord te geven - omdat deze fout vrij vaak voorkomt - zijn hier een paar oorzaken:

1) De :parameter naam komt per ongeluk niet overeen met de binding (typfout?). Dit is wat hier gebeurde. Hij heeft :alias in de SQL-instructie, maar gebonden :username . Dus toen de parambinding werd geprobeerd, kon Yii/PDO :username niet vinden in de sql-instructie, wat betekent dat het "één parameter kort" was en een fout veroorzaakte.

2) Helemaal vergeten de bindValue() . toe te voegen voor een parameter. Dit is gemakkelijker te doen in Yii andere constructies zoals $critera , waar je een array of params hebt ($criteria->params = array(':bind1'=>'test', ':bind2'=>'test) ).

3) Vreemde conflicten met CDataProvider paginering en/of sortering bij gebruik together en joins . Er is geen specifieke, gemakkelijke manier om dit te karakteriseren, maar bij het gebruik van complexe query's in CDataProviders heb ik rare problemen gehad met het wegvallen van parameters en het optreden van deze fout.

Een zeer handige manier om deze problemen in Yii op te lossen, is door parameterregistratie in te schakelen in je configuratiebestand. Voeg dit toe aan uw db array in je configuratiebestand:

'enableParamLogging'=>true,

En zorg ervoor dat de CWebLogRoute route is ingesteld in je log sectie. Hiermee wordt de query afgedrukt die gaf en fout, en alle parameters die het probeerde te binden. Super handig!



  1. Verbinding maken met host PostgreSQL vanaf een zwervende virtualbox-machine

  2. MySQL, MariaDB, Percona Server, MongoDB of PostgreSQL implementeren - gemakkelijk gemaakt met ClusterControl

  3. Meerdere select-instructies in Enkele query

  4. Nieuwe tabellen maken in IRI Workbench