Eroarea parametrului nevalid al parametrului de parametru nu a fost definit ()


Această eroare semnalează probleme cu substituenții. Sub cuvântul parametru, acesta este ceea ce vrea să spună. Adică "parametrul nu a fost definit" înseamnă că încercăm să atașăm un substituent la interogare, care nu este în el.







De exemplu, am definit o solicitare pentru un substituent, dar am greșit atunci când scriem numele într-o matrice:

$ stmt = $ db -> pregăti ('UPDATE t SET nume =. WHERE id =: nume');
$ stmt -> execuție (['mane' => $ nume. 'id' => $ id]));

DOP va încerca să găsească în cerere un substituent numit "mane", nu o va găsi și va da această greșeală foarte!

Apropo, spre deosebire de concepția greșită pe scară largă, prezența unui colon în indexul matricei nu este absolut necesară și cauza erorii nu poate fi.

Când corectați această eroare, trebuie să fiți atenți la următoarele probleme:







1. Cea mai obișnuită: utilizatorul are în mod obișnuit locații în ghilimele. Acest lucru nu poate fi făcut în niciun caz - DOP le va lua pentru liniile obișnuite și, în cele din urmă, nu va găsi în nicio interogare niciun substituent.

2. De asemenea, motiv foarte frecvent: typos în placeholders numit. Spuneți, în cererea user_name, și în datele transmise - numele de utilizator. De asemenea, rețineți faptul că numele substituenților sunt sensibili la minuscule.

3. Similar cu eroarea anterioară: pur și simplu ați uitat să scrieți în solicitare substituentul pentru care transmiteți datele. Este necesar să sortați cu atenție toate datele transmise și locurile corespunzătoare.

4. Rețineți, de asemenea, că pentru numele substituentului sunt acceptate numai litere latine, numere și o subliniere. Deci, dacă aveți o scrisoare rusă în numele substituentului, atunci aceasta va provoca aceeași eroare.

5. Dacă șirul de interogare este generat dinamic, atunci atunci când apar astfel de erori, trebuie să aplicați abilități de depanare - și anume să ieșiți din programul SQL generat și să vedeți dacă se potrivește cu cel așteptat. Apropo, atunci când se formează dinamic o interogare, ar trebui să acordați atenție protecției împotriva injectării numelor de câmpuri. Numele trebuie să fie scrise în script și să intre în interogare numai din această listă pre-pregătită!







Trimiteți-le prietenilor: