MySQL Problem

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 Leute,
    ich habe ein Problem mit der Funktion mysql_fetch_field.
    Dieser Code steht unter OnPlayerLogin, und sobald das ausgeführt wird, stürtzt der Server ab.


    new DataString[128],Query[128];
    format( Query, sizeof( Query ), "SELECT * FROM `accounts` WHERE `UserID` = '%d'", PlayerInfo[playerid][pDatabaseID]);
    mysql_query( Query );
    mysql_store_result();


    mysql_fetch_field("Level", PlayerInfo[playerid][pLevel]);
    PlayerInfo[playerid][pLevel] = strval(DataString);
    // Hier hinter folgen die anderen Stats
    mysql_free_result();


    Das Registrieren mit:
    format(Query, sizeof( Query ), "INSERT INTO `accounts` (Username, Passwort) VALUES('%s', '%s')", Name, Pass);
    mysql_query( Query );
    klappt noch alles perfekt.
    Und auch beim Login mit
    new Query[ 128 ];
    format( Query, sizeof( Query ), "SELECT `%s` FROM `accounts` WHERE `UserID` = '%d'", Password, PlayerDatabaseID);
    mysql_query( Query );
    mysql_store_result();
    if( mysql_fetch_row( holdingvar ) == 1 )
    {
    mysql_free_result();
    }
    läuft noch alles ganz gut.



    Ich hoffe, dass ihr mir helfen könnt :)


    Gruß Hauke

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • bei onplayerlogin muss das so aufgelistet werden
    samp_mysql_store_result();
    samp_mysql_fetch_row(Data);
    samp_mysql_strtok(Field, "|", Data);
    while (samp_mysql_strtok(Field, "|", "")==1)
    {
    if (rcnt == 3) PlayerInfo[playerid][pLevel] = strval(Field);
      if (rcnt == 4) PlayerInfo[playerid][pAdmin] = strval(Field);

  • new DataString[128],Query[128],new playername[MAX_PLAYER_NAME]; // das könntest du nach ganz oben stecken dann hast du beim connecten immer den name des Spieler in einer variable
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
    format( Query, sizeof( Query ), "SELECT * FROM `accounts` WHERE `Nickname` = '%s'",playername ); // hier habe ich etwas geändert Nickname mit deinem auswechseln wie du es halt in der Tabelle hast..
    mysql_query( Query );
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_fetch_field("Level", PlayerInfo[playerid][pLevel]);
    PlayerInfo[playerid][pLevel] = strval(DataString);
    // Hier hinter folgen die anderen Stats
    mysql_free_result();
    }

  • Die UserID darf/sollte doch eh nur einmalig sein. Kommen i.welche MySQL Fehler?


    EDIT: Ich würd mal überall print hinschreiben, dann weißt du genau wo der Server abstürzt, also nach jeder Zeile eine weitere mit print("1"); dann bei der nächsten Programmzeile print("2"); und bei der er halt nicht mehr weiter macht, da muss der Fehler liegen.

  • Die UserID wird vom MySQL Server her selbst weitergezählt (so wie es sein soll)
    Und es gibt keine Errors. Der Server geht einfach ohne Begründung aus, doch wenn ich das Auskommentiere startet er.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Erstaunliches Ergebnis, wie ich finde:
    Code:
    new DataString[128],Query[128], playername[MAX_PLAYER_NAME];
    print("1");
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
    print("2");
    format( Query, sizeof( Query ), "SELECT * FROM accounts WHERE UserID = %d LIMIT 1", PlayerInfo[playerid][pDatabaseID]);
    print("3");
    mysql_query( Query );
    print("4");
    mysql_store_result();
    print("5");
    if(mysql_num_rows())
    {
    mysql_fetch_field("Level", PlayerInfo[playerid][pLevel]);
    PlayerInfo[playerid][pLevel] = strval(DataString);
    print("6");
    mysql_free_result();
    }
    In der Serverlog geht´s bis zur 5. Die 6 ist nicht mehr drinne.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • mysql_fetch_field("Level", DataString);
    PlayerInfo[playerid][pLevel] = strval(DataString);


    Probiere mal so !


    Floats gehen kann ich dir helfen =)


    Beispiel



    mysql_fetch_field("X",DataString);
    SetPVarFloat(playerid,"X",floatstr(DataString));

    Opa :love: Freund und helfer =)