MySQL query format error?

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
  • hi leute,


    ich will mir ein login&register system mit mysql machen...


    ich hab den mysql plugin von strickenKid, wenn ihr bessere kennt sagt bescheid^^


    Nun hab ich das Problem wenn ich meinen Server starte und mich einloggen möchte, ein sql-error kommt...
    Unter mysql wird die abfrage ausgeführt.... deshalb denk ich mal das die formatierung der variablen etc. falsch ist ?^^


    Hier mal bisschen code:


    //einmal unter LoginPlayer(playerid,pass[])


    format(query, sizeof(query),"SELECT * FROM userdata WHERE pName = '%s' AND pPassword = md5('%s')",playerdb[playerid][pName],pass);
    mysql_query(query);


    // was ist dort falsch ?? ^^


    //einmal unter IsPlayerRegistered(playerid, usernm[])


    format(query, sizeof(query),"SELECT * FROM userdata WHERE pName = '%s'", usernm);
    mysql_query(query);


    //ondialogresponse
    format(query, sizeof(query),"INSERT INTO userdata (pName,pPassword,pLevel,pMoney,pSkin) VALUES ('%s',md5('%s'),%d,%d,%d)",playerdb[playerid][pName],inputtext,1,20000,24);
    mysql_query(query); // ich glaub hier ist der fehler ;D



    Ich sscanf/sscanf2 plugin auch am start^^


    Wenn ihr in erkennt wär echt cool.

  • Zitat

    Nun hab ich das Problem wenn ich meinen Server starte und mich einloggen möchte, ein sql-error kommt...


    Auch mal daran gedacht,den "sql-error" mitzuteilen ? Kann ja keiner die Fehlermeldung erraten.


    Die Abfragen sehen soweit okay aus,lass die doch mal nach dem format() mit print ausgeben. Du könntest sie dann a) hier erst mal posten und b) sie selber ausführen lassen direkt an der MySQL Datenbank ( Wenn ich das richtig verstanden habe,hast es ja bereits probiert ).
    Für dein 3. Query ist eventuell der String zu klein.128 Zeichen dürften da knapp werden. Ich weiss nicht wie groß dein Array an dieser Stelle ist, habe einfach mal auf 128 geschätzt.

  • Was für ein SQL-Error wird denn ausgegeben, wenn du so groß vom SQL-Error sprichst? md5() im Query zu verwenden, wird wohl schlecht funktionieren, du kannst keine Funktionen im Query ausführen lassen. Mach dich dabei auch gleich über SQL-Injections schlau und über threaded Querys. Ebenfalls schalte doch einfach während der Entwicklungsphase das Debugging ein. Das wird dir unheimlich Zeit sparen.


    new MySQL:connection = mysql_init(LOG_ALL, 1);

  • hier ist der error der beim eingeben des Login dialoges erscheint:^^


    SQL
    [join] Player has joined the server (0:127.0.0.1)
    [MySQL] Error (0): Failed to exeute query. You have an error in your SQL syntax;
     check the manual that corresponds to your MySQL server version for the right sy
    ntax to use near '' at line 1.


    schaut so aus als ob der den string garnich einliest is die format fkt also falsch?:P


  • Auch mal daran gedacht,den "sql-error" mitzuteilen ? Kann ja keiner die Fehlermeldung erraten.


    Die Abfragen sehen soweit okay aus,lass die doch mal nach dem format() mit print ausgeben. Du könntest sie dann a) hier erst mal posten und b) sie selber ausführen lassen direkt an der MySQL Datenbank ( Wenn ich das richtig verstanden habe,hast es ja bereits probiert ).


    Was du da gerade gepostet hast,hilft weder dir noch uns.

  • lag scheinbar echt an der md5 Verschlüsellung


    Zitat

    Ebenfalls schalte doch einfach während der Entwicklungsphase das Debugging ein. Das wird dir unheimlich Zeit sparen.


    was meinst du damit?^^


    Jetz hab ich das prob dass beim ersten login der server abstürzt^^
    Lese ich die rows falsch aus oder ist das sscanf falsch ? :o


    Zudem würde ich gerne wissen ob man den onplayerrequestclass cb bzw. andere ausschalten kann^^

    stock LoginPlayer(playerid, pass[])
    {
    new query[1000];
    format(query, sizeof(query),"SELECT * FROM userdata WHERE pName = '%s' AND pPassword = '%s'",playerdb[playerid][pName],pass);
    printf("Der Spieler %s hat sich Regestriert, die Query lautet %s",playerdb[playerid],query); // bist hierhin kommt der noch
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() != 0)
    {
    if(mysql_fetch_row(query, "|")) // wrong ??
    {
    sscanf(query,"e<p<|>s[24]s[32]iii>", playerdb[playerid]); // wrong??
    new str[80];
    format(str, sizeof(str),"Welcome %s, you have been loged to your account",playerdb[playerid][pName]);
    printf("der string lautet: %s",str); // das wird nicht mehr ausgegeben
    SendClientMessage(playerid, COLOR_BLUE, str);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerScore(playerid, playerdb[playerid][pLevel]);
    GivePlayerMoney(playerid, playerdb[playerid][pMoney]);
    SetPlayerSkin(playerid,playerdb[playerid][pMoney]);
    SpawnPlayer(playerid);
    playerdb[playerid][pLogged] = 1; // set player loged variable true
    }
    }
    else
    {
    ShowPlayerDialog(playerid,LOGIN_DIALOG,DIALOG_STYLE_PASSWORD,"Login to Account.","Wrong password:","Login","Cancel");
    }
    }


    +--------+-----------+--------+--------+------+-------+--------+
    | pName | pPassword | pLevel | pMoney | IP | pSkin | pAdmin |
    +--------+-----------+--------+--------+------+-------+--------+
    | Player | 12345 | 1 | 20000 | NULL | 24 | NULL |
    +--------+-----------+--------+--------+------+-------+--------+
    1 row in set (0.00 sec)


    mysql> So sieht meine tabelle aus^^ Wie muss ich das sscanf formatieren(bei null werten)?;D


    7 Mal editiert, zuletzt von thacoga308 ()