THE ORB
Uruchamiam studio

Błąd składni SQL

Skrypt wysłał do bazy zapytanie, którego nie dało się zrozumieć.

groupsTa funkcja przestaje działaćcodePotrzebny programista

Zrób najpierw to

To błąd w skrypcie. Zgłoś go temu, kto go napisał, razem z tą linijką.

bug_reportWklej zamiast tego całą konsolę

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. 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. 2

    Słowo zarezerwowane użyte jako nazwa kolumny

    rank, groups, key, order, read. MySQL 8 dodał rank do słów zarezerwowanych, co z dnia na dzień popsuło mnóstwo starszych schematów FiveM.

  3. 3

    Przecinek na końcu

    SELECT a, b, FROM users — zwykle zostaje po usunięciu kolumny z listy.

  4. 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. 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 Fixer

Dla tego rodzaju błędu Script Optimizer wyłapuje wzorce zapytań, które to powodują.

Błędy, które chodzą z tym w parze