Probleme beim Query für MySQL

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    ich habe derzeit Probleme dabei daten in die Datenbank einzutragen.


    Befehl wie folgt


    mysql_format(handle, query, sizeof(query), "INSERT INTO `timeban` (`name`,`time`,`banner`,`bantime`,`banreason`) VALUES ('%e','%i',`%e`,`%e`,`%e`)",pName(playerid),timestamp,bannername,string1,string); mysql_pquery(handle, query);



    ein print gibt folgendes aus


    [10:21:48] INSERT INTO `timeban` (`name`,`time`,`banner`,`bantime`,`banreason`) VALUES ('Don','1504081428',`Don`,`30.08.2017 - 10/21/48`,`darum`)

  • Um die Problematik einmal darzustellen:


    Der SQL Server erwartet, dass nur Spaltenbezeichnungen innerhalb von Gravis (`) enthalten sind, du nutzt dieses Zeichen jedoch auch bei den letzten drei Werten. Einfach den Gravis mit einem Hochkomma ersetzen, und der Query sollte ausgeführt werden.

  • Wo du es gerade sagst sehe ich das auch =). Immer die Kleinigkeiten die einen mehr arbeit machen.


    Eine Frage habe ich noch da es damit zusammen hängt.


    Wie kriege ich es hin bei sscanf also hier



    if(sscanf(params, "us[128]i", pID, grund,dauer))return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Grund] [Dauer]");


    das ich nicht nur


    /befehl 0 Darum 2


    angeben kann sondern auch


    /befehl 0 Darum weil ich es so will 2


    also das ich auch leerzeichen anfügen kann

  • Dafür muss man kurz laienhaft die Vorgehensweise von sscanf erklären:


    sscanf überprüft deine Angaben nach den jeweiligen Datentypen, die du angegeben hast und teilt deine Eingaben anhand von Leerzeichen. Wenn du nun angibst, eine userID, string und eine Zahl zu übermitteln, macht sscanf folgendes


    /befehl 0(userID)|Darum(string)|2(Zahl)


    Um das zu verhindern, solltest du den string stets als letzten Parameter angeben -> dann wird diese Mechanik eben nicht mehr ausgelöst, da kein weiterer Parameter mehr erwartet wird und dementsprechend keine Teilung mehr erfolgt.


    Code
    if(sscanf(params, "uis[128]", pID,,dauer, grund))return SendClientMessage(playerid, 0xFF004BFF, "/tban [ID] [Dauer] [Grund]");
  • Um die Problematik einmal darzustellen:
    Der SQL Server erwartet, dass nur Spaltenbezeichnungen innerhalb von Gravis (`) enthalten sind, du nutzt dieses Zeichen jedoch auch bei den letzten drei Werten. Einfach den Gravis mit einem Hochkomma ersetzen, und der Query sollte ausgeführt werden.

    Nicht ganz korrekt, auch Tabellennamen. Abgesehen davon sind diese überflüssig, wenn man Namen wählt die keine reservierten MySQL-Keywords sind ;) - Nur am Rande zur zusätzlichen Information.

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)