Server Crash von einem CMD?

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 Tag, von DMA habe ich einen schönen Befehl bekommen der auch funktioniert, von 8D. ein Befehlsschnipsel und Hilfe wie es funktioniert undzwar geht es darum das ein User Offlinenachrichten empfangen kann in meinem Script diese werden in der MySQL Datenbank gespeichert sobald der Spieler Online kommt, kommt eine Nachricht das er Nachrichten im Postfach hat dann kann er /test liste verwenden damit alle aufgelistet werden doch dann Crasht der Server fehlermeldungen im Log kommen keine.


    Die bisherige anwendung nur ein Schnipsel aus /text nur das mit dem was den Crash verursacht..
    if(!strcmp(strget(cmdtext, 1), "liste") && strlen(strget(cmdtext, 1)) == strlen("liste"))
    {
    format(Textstring256,sizeof Textstring256, "SELECT * FROM NachrichtenTabelle WHERE Nickname='%s'",GetName(playerid));
    mysql_query(Textstring256);
    mysql_store_result();
    new amount = mysql_num_rows();
    if(amount <= 0)
    {
    SendClientMessage(playerid,FARBE_GRAU,"Du hast keine Nachrichten!");
    return 1;
    }
    new counter;
    while(counter <= amount)
    {
    format(Textstring256,sizeof(Textstring256),"SELECT * FROM NachrichtenTabelle WHERE Nickname='%s' LIMIT %d,1",GetName(playerid),counter);
    mysql_query(Textstring256);
    if(mysql_num_rows())
    {
    new betreff[64],bID;
    mysql_fetch_field("ID",betreff);
    bID = strval(betreff);
    mysql_fetch_field("Betreff",betreff);
    format(Textstring126,sizeof(Textstring126),"Nachrichtentitel: %s Nummer: %d",betreff,bID);
    SendClientMessage(playerid,FARBE_MANGO,Textstring126);
    counter++;
    return 1;
    }
    }
    }


    \°\Edit: Rechtschreibung

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

    Einmal editiert, zuletzt von TPO ()

  • So habs mal etwas debuggt nun sieht der Command anders aus warum es Crasht auch gefunden hier meine Console wird vollgespammt:

    Zitat

    [19:51:22] [MySQL] Error (0): Failed to exeute query. Commands out of sync; you can't run this command now.
    [19:51:22] 9
    [19:51:22] [MySQL] Error (0): Function: mysql_num_rows called when no result stored. Commands out of sync; you can't run this command now.
    [19:51:22] 7
    [19:51:22] 8

    Dies wiederholt sich durchgehend. Hier der Command habe einiges rausgenommen zum schauen wo der Fehler überhaupt liegt..
    if(!strcmp(strget(cmdtext, 1), "list") && strlen(strget(cmdtext, 1)) == strlen("list"))
    {
    print("1");
    format(Textstring256,sizeof Textstring256, "SELECT * FROM `NachrichtenTabelle` WHERE Nickname='%s'",GetName(playerid));
    print("2");
    mysql_query(Textstring256);
    print("3");
    mysql_store_result();
    print("4");
    new amount = mysql_num_rows();
    print("5");
    new counter;
    print("6");
    while(counter <= amount)
    {
    print("7");
    format(Textstring256,sizeof(Textstring256),"SELECT * FROM `NachrichtenTabelle` WHERE Nickname='%s' LIMIT %d,1",GetName(playerid),counter);
    print("8");
    mysql_query(Textstring256);
    print("9");
    if(mysql_num_rows())
    {
    print("10");
    SendClientMessage(playerid,FARBE_WEISS,"Test");
    return 1;
    }
    }
    }

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • Welches MYSQL Plugin nutzt du überhaupt,es gibt 3 Verschiedene.
    Generell würde Ich aber sagen,du hast nicht gelesen,was da in der Log steht.Denn dort steht,du speichert nach dem query() nicht das Ergebniss um von dort aus die numrows zu bekommen.



    print("1");
    format(Textstring256,sizeof Textstring256, "SELECT * FROM `NachrichtenTabelle` WHERE Nickname='%s'",GetName(playerid));
    print("2");
    mysql_query(Textstring256);
    print("3");
    mysql_store_result();
    print("4");
    new amount = mysql_num_rows();
    print("5");
    new counter;
    print("6");
    while(counter <= amount)
    { // !!!!!!!!!!
    print("7");
    format(Textstring256,sizeof(Textstring256),"SELECT * FROM `NachrichtenTabelle` WHERE Nickname='%s' LIMIT %d,1",GetName(playerid),counter);
    print("8");
    mysql_query(Textstring256);
    print("9");
    if(mysql_num_rows())
    {
    print("10");
    SendClientMessage(playerid,FARBE_WEISS,"Test");
    return 1;
    }
    } //!!!!!

    Wozu machst du das ganze eigentlich doppelt?Mit der while() Schleife gehst du doch bereits alle Einträge durch 0o.


    //Edit: Achja,vergessen.mysql_fetch_row wäre das Stichwort :-O

    Einmal editiert, zuletzt von Goldkiller ()

  • Naja doppelt macht er es nicht unbedingt.
    Beim ersten mal, lässt er sich die Anzahl der Datensätze zurückgeben, um in der While schleife nicht alle Datensätze durchzugehen, sprich wenn es 4 Einträge gibt, er nicht noch nach weiter nach Eintrag 5 und 6 sucht, etc.

  • Goldkiller das ist ja schön und gut doch ich verstehe von MySQL bisher wenig, alles was ich weiß, weiß ich von 8D.


    Also fehlt mir theoretisch nur ein
    mysql_store_result();
    oder wie darf ich das sehen?

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Dann wäre es wohl besser du schaust dir kurz und knapp eine Anleitung zu MYSQL an.
    Wie auch immer,wenn Ich mich richtig erinnere,wäre es trotzdem logischer es mit mysql_fetch_row zu machen.


    new
    amount,
    sResult[128];
    format(Textstring256,sizeof Textstring256, "SELECT * FROM `NachrichtenTabelle` WHERE Nickname='%s'",GetName(playerid));
    mysql_query(Textstring256);
    mysql_store_result();
    amount = mysql_num_rows();
    if(amount) {
    while(mysql_fetch_row(sResult)) {
    //sResult ist dann die gesamte Zeile
    }
    }

    Wieso es crasht könnte vielleicht noch hier liegen:
    while(counter <= amount)
    counter wird immer kleiner als amount sein,denn weder counter noch amount ändern bei dir ihre Werte.Muss nicht daran liegen,kann aber ;).

  • Danke finde nur keine wirklichen Anleitungen für MySQL..


    Achja Counter wird verändert, wird also irgendwann die Summe erreichen :P
    counter++;

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • http://dev.mysql.com/doc/refman/5.1/de/index.html
    Da haste eine Anleitung zu MYSQL.Die Funktionen lautet meist gleich,sonst ist da kein Unterschied.


    Zitat

    Achja Counter wird verändert, wird also irgendwann die Summe erreichen :P


    Ne,eben nicht.In deiner Anfangsversion schon,nicht in der stripped aus diesem Post.


    Probier es mal mit Code von hier,und lass dir sResult immer ausgeben via printf.
    printf("sResult = '%s'",sResult);

  • Du musst den Speicher freimachen, für jede nächste Abfrage:

    SQL
    mysql_free_result();


    Also:


    mysql_query(Textstring256);
    mysql_store_result();
    new amount = mysql_num_rows();
    mysql_free_result();


    in der while Schleife:

    mysql_query(Textstring256);
    if(mysql_num_rows())
    {
    SendClientMessage(playerid,FARBE_WEISS,"Test");
    }
    mysql_free_result();


    @ edit: PWN-Tags vergessen