Server crash durch mysql_fetch_field Strickenkid

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
  • Guten Nachmittag Breadfisher.


    Ich habe momentan ein blödes Problem. Manchmal wenn ein Spieler connected und sich einloggt, aber nicht immer, crasht der Server.
    Das komische daran ist, dass es laut Crashdetect nicht immer die gleiche Stelle ist, wodurch ich es nicht gut beheben kann.


    Hier mal Logs und Code:


    new query[128],bool:requireEmail = false,data[64],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));

    format(query, sizeof(query), "SELECT * FROM User WHERE Name = '%s'", playername);


    mysql_query(query,-1,-1,connection);
    mysql_store_result(connection);


    mysql_fetch_field("ID",data,connection);
    SetPVarInt(playerid,DBID_KEY,strval(data));


    mysql_fetch_field("Admin",data,connection);
    SetPVarInt(playerid,ADMIN_KEY,strval(data));


    mysql_fetch_field("Email",data,connection);
    SetPVarString(playerid,EMAIL_KEY,data);
    if(strcmp(data,"notset",true) == 0 && strlen(data) != 0)
    {
    requireEmail = true;
    }


    mysql_fetch_field("Kills",data,connection);
    SetPVarInt(playerid,KILLS_KEY,strval(data));


    mysql_fetch_field("Tode",data,connection);
    SetPVarInt(playerid,TODE_KEY,strval(data));


    mysql_fetch_field("Warn",data,connection);
    SetPVarInt(playerid,WARN_KEY,strval(data));


    mysql_fetch_field("Prison",data,connection);
    SetPVarInt(playerid,PRISON_KEY,strval(data));


    .
    .
    .
    .


    Zeile 1898 ruft nur die stock Funktion loadPlayer auf, aus dem der obige Code ist.
    Zeile 11116 (die mit dem Fehler) ist in diesem Falle
    mysql_fetch_field("Tode",data,connection);
    Aber ich hatte auch schon Errors in denen eine der anderen mysql_fetch_field Methoden den Error geworfen hat.


    Hat da jemand eine Lösung parat?


    edit 1: push: letzter edit: 2.9.13 um 16:21 , also mehr als 48 h

    Einmal editiert, zuletzt von Hagi ()

  • Dann teste das hier mal
    new query[128],bool:requireEmail = false,data[64],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
    format(query, sizeof(query), "SELECT * FROM `User` WHERE `Name` = '%s' LIMIT 1;", playername);
    mysql_query(query,-1,-1,connection);
    mysql_store_result(connection);
    if(mysql_num_rows(connection))
    {
    mysql_fetch_row_data(connection);
    mysql_fetch_field("ID",data,connection); SetPVarInt(playerid,DBID_KEY,strval(data));
    mysql_fetch_field("Admin",data,connection); SetPVarInt(playerid,ADMIN_KEY,strval(data));
    mysql_fetch_field("Email",data,connection); SetPVarString(playerid,EMAIL_KEY,data);
    if(!strcmp(data,"notset",true) && strlen(data) != 0){requireEmail = true;}
    mysql_fetch_field("Kills",data,connection); SetPVarInt(playerid,KILLS_KEY,strval(data));
    mysql_fetch_field("Tode",data,connection); SetPVarInt(playerid,TODE_KEY,strval(data));
    mysql_fetch_field("Warn",data,connection); SetPVarInt(playerid,WARN_KEY,strval(data));
    mysql_fetch_field("Prison",data,connection); SetPVarInt(playerid,PRISON_KEY,strval(data));
    }
    else
    {
    //Acc nicht vorhanden
    }
    mysql_free_result(connection);


    mysql_fetch_row_data(connection);
    Das bewirkt das die Select werte zwischengespeichert werden damit fetch field die sauber auslesen kann ;)

    All in all it's just another brick in the wall