THE ORB
Studio wird gestartet

Du hast einen Fehler in deiner SQL-Syntax

Ein Script hat der Datenbank eine Anfrage geschickt, die sie nicht verstehen konnte.

groupsDiese Funktion hört auf zu funktionierencodeBraucht einen Entwickler

Mach das zuerst

Das ist ein Fehler im Script. Meld ihn dem Autor, mit dieser Zeile.

bug_reportFüg lieber deine ganze Konsole ein

Was es bedeutet

MySQL hat die Anweisung abgelehnt. Die Meldung zitiert den Text ab der Stelle, an der es aufgab — das ist der nützlichste Teil: Was auch immer zitiert wird, das Problem sitzt dort oder direkt davor.

Was es auslöst

Sortiert danach, wie oft es die Antwort ist.

  1. 1

    Stringverkettung statt Parametern

    SQL mit .. und einem Wert bauen, der ein Anführungszeichen enthält. Das ist zugleich eine SQL-Injection-Lücke — es zu beheben lohnt aus zwei Gründen.

  2. 2

    Ein reserviertes Wort als Spaltenname

    rank, groups, key, order, read. MySQL 8 hat rank zu den reservierten Wörtern genommen, was über Nacht viele alte FiveM-Schemata zerlegte.

  3. 3

    Ein Komma zu viel am Ende

    SELECT a, b, FROM users — meist das, was nach dem Löschen einer Spalte aus der Liste übrig bleibt.

  4. 4

    Die Anzahl der Platzhalter passt nicht

    Mehr ? als Werte, oder ein benannter Parameter, der nie geliefert wurde. Manche Treiber melden das als Syntax- statt als Bindungsfehler.

  5. 5

    Mehrere Anweisungen in einer Abfrage

    oxmysql führt zwei durch ; getrennte Anweisungen nicht in einem Aufruf aus, außer der Treiber ist dafür konfiguriert.

Wie du erkennst, welcher deiner ist

Lies das zitierte Fragment im Fehler. Gib dann das fertige SQL aus und führ es von Hand in einem MySQL-Client aus: Scheitert es dort genauso, ist es die Anweisung; klappt es, sind es die Parameter.

Wo du nachsehen musst

Der Abfragestring in der Resource und die gebundenen Werte.

Wie du es behebst

Nimm immer Platzhalter. Das löst das Syntax- und das Injection-Problem auf einen Schlag:

-- falsch
MySQL.query('SELECT * FROM users WHERE name = "' .. name .. '"')

-- richtig
MySQL.query('SELECT * FROM users WHERE name = ?', { name })

Und setz reservierte Wörter in Backticks:

SELECT `rank` FROM users WHERE identifier = ?

Hängst du immer noch an deinem eigenen Code?

Diese Seite sagt, was dieser Fehler üblicherweise bedeutet. Füg deine Konsole in Server Fixer ein: es sortiert alles darin und sagt dir, was zuerst dran ist; und wenn du lieber nicht ranwillst, kann ORBIE das Script reparieren und dir die Resource fertig zum Einsetzen zurückgeben.

bug_reportServer Fixer öffnen

Für diese Art Fehler Script Optimizer erkennt die Abfragemuster, die das verursachen.

Fehler, die mit diesem zusammen auftreten