Błąd składni SQL
Skrypt wysłał do bazy zapytanie, którego nie dało się zrozumieć.
Zrób najpierw to
To błąd w skrypcie. Zgłoś go temu, kto go napisał, razem z tą linijką.
Co to znaczy
MySQL odrzucił zapytanie. Komunikat cytuje tekst od miejsca, w którym się poddał, i to najbardziej przydatna jego część: cokolwiek jest zacytowane, problem jest tam albo tuż przed tym.
Co to powoduje
Uszeregowane według tego, jak często są odpowiedzią.
- 1
Sklejanie ciągów zamiast parametrów
Budowanie SQL-a przez
..z wartością, która zawiera apostrof. To także dziura na SQL injection, więc warto to naprawić z dwóch powodów. - 2
Słowo zarezerwowane użyte jako nazwa kolumny
rank,groups,key,order,read. MySQL 8 dodałrankdo słów zarezerwowanych, co z dnia na dzień popsuło mnóstwo starszych schematów FiveM. - 3
Przecinek na końcu
SELECT a, b, FROM users— zwykle zostaje po usunięciu kolumny z listy. - 4
Niezgodna liczba placeholderów
Więcej
?niż wartości albo nazwany parametr, którego nigdy nie podano. Część sterowników zgłasza to jako błąd składni, a nie błąd wiązania. - 5
Kilka zapytań w jednym wywołaniu
oxmysql nie uruchomi dwóch zapytań rozdzielonych
;w jednym wywołaniu, chyba że sterownik jest pod to skonfigurowany.
Jak poznać, który jest twój
Przeczytaj zacytowany fragment w błędzie. Potem wypisz finalny SQL i uruchom go ręcznie w kliencie MySQL — jeśli tam padnie tak samo, chodzi o zapytanie; jeśli się uda, chodzi o parametry.
Gdzie szukać
Ciąg zapytania w zasobie i wiązane wartości.
Jak to naprawić
Zawsze używaj placeholderów. Naprawia to naraz problem składni i problem wstrzyknięcia:
-- źle
MySQL.query('SELECT * FROM users WHERE name = "' .. name .. '"')
-- dobrze
MySQL.query('SELECT * FROM users WHERE name = ?', { name })Słowa zarezerwowane bierz w odwrotne apostrofy:
SELECT `rank` FROM users WHERE identifier = ?
Wciąż utknąłeś na własnym kodzie?
Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.
bug_reportOtwórz Server FixerDla tego rodzaju błędu Script Optimizer wyłapuje wzorce zapytań, które to powodują.