Falsche Where abfrage beendet den server?

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 Brotfischer!
    Also ich habe mir das mysql Plugin von Adrenaline DJ geladen, und muss feststellen, dass immer, wenn ich eine abfrage ausführe und die nicht funktioniert(eine zeile ausfragt die nicht existiert, zb. bei der frage mit mysqlget ob der user existiert, da will man bei der registration ja wissen, ob er schon existiert, und wenn er icht existiert kann man ja neuen user eintragen.) bloß das problem ist, wenn ich abfrage, ob er existiert und der User existiert nicht, dann beendet das script den server aufeinmal. kann man das verhindern oder muss ich mir ein neues plugin suchen?
    Danke im Vorraus, SkEiTa


    //edit: hier noch der pwn code von mysqlget();

    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    samp_mysql_query(query);
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    else
    {
    samp_mysql_free_result();
    return false;
    }
    }

  • Wenn du mysqlget abfragst, solltest du das wiedergegebene also ob true oder false, vorerst in eine Variable Speichern und wenn es false ergibt, sofort den Vorgang abbrechen.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Wäre super wenn du mir noch erklären könntest, wie ich das ganze abspeicher und abbreche :)

  • Zeig mir mal paar Zeilen wo du mysqlget verwendest, dann kann ich dir helfen.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • okay wait...



    public OnPlayerConnect(playerid)
    {
    new bedienung[256];
    new playername[256];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(bedienung,sizeof(bedienung),"name='%s'",playername);
    new daten[256];
    if(mysqlget(mysql_usertable,bedienung,"Passwort",daten))
    {
    gPlayerAccount[playerid] = 1;
    ShowPlayerDialog(playerid, 4, 1, "Log-In", "Bitte Logge dich mit deinem Passwort ein!", "Log-In", "Verlassen");
    return 1;
    }
    else
    {
    gPlayerAccount[playerid] = 0;
    ShowPlayerDialog(playerid, 5, 1, "Registration", "Bitte Tippe hier dein Passwort für einen neuen Account ein!", "Register", "Verlassen");
    }
    return 1;
    }


    Funzt einwandfrei, aber dieses macht dann probleme:


    if(dialogid == 5)
    {
    if(response == 1)
    {
    new query[512];
    new daten[256];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string, sizeof(string), "name = %s", playername);
    if(!mysqlget(mysql_usertable,string,"name",daten))
    {
    SendClientMessage(playerid, COLOR_GREY, " This Name is already in Use! Please Choose another!");
    Kick(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Erfolgreich Registriert!");
    format(query, sizeof(query), "INSERT INTO '"mysql_usertable"' (name, passwort) VALUES ('%s', '%s')", playername, inputtext);
    samp_mysql_query(query);
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    Warum habe cih ja schon erklärt :)

  • Ach verdammt sry, denkfehler. Ich hab mich mit MySQL nie beschäftigt, aber aus deinem stock gehört das


    samp_mysql_free_result();


    bei else raus, denn was für ein Ergebnis bitte soll er den finden? Wenn es das gar nicht gibt, verstehst? ^^


    Aber ich müsste mich echt mal mit PAWN-MySQL beschäftigen...

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Unterscheidet sich ja nicht von normalem MySQL, bis auf den Verwendungszweck, beschränkte Befehle usw. ...
    Und noch zur allgemeinen Information: Der Server stürzt bei fehlerhaftem SQL-Code ab, da das Plugin und somit der SAMP-Prozess nichts mit den von MySQL zurückgegebenen Errors anzufangen wissen.

  • Ähm das kommt dabei raus(serverlog)


    Code
    [12:00:41] [join] SkEiTa has joined the server (0:5.69.74.128)
    [12:00:42] Error in mysql_query: Unknown column 'SkEiTa' in 'where clause'
    [12:00:42] Error in mysql_store_result: Unknown column 'SkEiTa' in 'where clause'


    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    samp_mysql_query(query);
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    else
    {
    return false;
    }
    }

  • ServerAbsturz noch immer? Wenn nicht dann passt es doch ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Zitat

    ServerAbsturz noch immer?

    Jaaaa -.-


    nach diesem err kackt er ab:

    Code
    [12:00:42] Error in mysql_query:  Unknown column 'SkEiTa' in 'where clause'
    [12:00:42] Error in  mysql_store_result: Unknown column 'SkEiTa' in 'where clause'
  • Ai, die Dokumentation von deinem MySQL ist sehr schwach ^^ Kannst du mal für mich was testen? Ersetz mal den stock damit hier:


    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    new ergebnis = samp_mysql_query(query);
    printf("Ergebnis Query: %d", ergebnis);
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    else
    {
    samp_mysql_free_result();
    return false;
    }
    }


    Bedeutet, du sollst dich einmal mit einem Benutzer anmelden der in MySQL eingespeichert ist und einmal der nicht eingespeichert ist, ok? Ich möchte wissen ob da ein Unterschied ist, um den Crash zu verhindern. Bitte die Beiden Debug log´s dann schicken. Danke!

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ohne Acc:

    Code
    [12:19:43] Error in mysql_query: Unknown column 'SkEiTa' in 'where clause'
    [12:19:43] Ergebnis Query: 0
    [12:19:43] Error in mysql_store_result: Unknown column 'SkEiTa' in 'where clause'
    -->Server Schaltet sich aus...


    mit Acc:

    Code
    [12:21:53] Incoming connection: 5.69.74.128:2527
    [12:21:53] [join] SkEiTa has joined the server (0:5.69.74.128)
    [12:21:53] Ergebnis Query: 1
    [12:21:55] #ACCOUNTING# 'a Player has Logged in!'
    [12:22:20] [part] SkEiTa has left the server (0:1)
    -->Server bleibt an...
  • Ähm, dein Problem hat eher damit was zu tun dass die Tabellen/Spalten/Zeilen nicht existieren. Der Server kann schon crashen, wenn du was falsch geschrieben hast, also in den querrys usw. Der Stock ansich sollte richtig sein.


    MFG, Robdeflop®

  • if(mysqlget(mysql_usertable,bedienung,"Passwort",daten))
    {
    gPlayerAccount[playerid] = 1;
    ShowPlayerDialog(playerid, 4, 1, "Log-In", "Bitte Logge dich mit deinem Passwort ein!", "Log-In", "Verlassen");
    }
    else
    {
    gPlayerAccount[playerid] = 0;
    ShowPlayerDialog(playerid, 5, 1, "Registration", "Bitte Tippe hier dein Passwort für einen neuen Account ein!", "Register", "Verlassen");
    }
    return 1;
    }


    mal benutzen bei deinem Abschnitt von OnPlayerconnect.


    Hast du mysql_usertable definiert? Wenn ja wie.

  • Seine mysql_usertable stimmt, sonst würde er sich mit einem bestehenden Account nicht einloggen können 8D ...


    Also Skeita probiers mal so aus:


    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    new ergebnis = samp_mysql_query(query);
    if(ergebnis == 0) return false;
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Nein, wenn dann so:


    format(query, sizeof(query), "INSERT INTO '%s' (name, passwort) VALUES ('%s', '%s')", mysql_usertable, playername, inputtext);


    aber dann müsste er auch vom stock das tables[] wegnehmen und dann auch bei jeder Zeile wo er den Stock verwendet das mysql_usertable weglöschen.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • warning 209: function "mysqlget" should return a value
    als cih die mysqlget geupdated habe nach dem vorbild von templer :(

  • Gut dann lassen wir ihm halt das return false; am Ende..
    stock mysqlget(table[],bedien[],abfrag[],data[])
    {
    new query[256];
    format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
    new ergebnis = samp_mysql_query(query);
    if(ergebnis == 0) return false;
    samp_mysql_store_result();
    if(samp_mysql_num_rows())
    {
    samp_mysql_get_field(abfrag, data);
    samp_mysql_free_result();
    return true;
    }
    return false;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • okay danach bekomme ich einen mysql error und da man das irgendwie nicht aus der konsole rauskopieren mach ich screenshot :D



    aber wo ist hier:

    format(query, sizeof(query), "INSERT INTO ´%s´ (´name´, ´passwort´) VALUES (´%s´, ´%s´)", mysql_usertable, playername, inputtext); samp_mysql_query(query);

    Ein fehler?


    //edit: Unknown Column `skeita` in `where clausel` kommt von einer abfrage davor, gehört nicht dazu, also einfach ignorieren das soll so :D Keine Hilfe? Keiner der MySQL kann? DAMN!

    2 Mal editiert, zuletzt von SkEiTa ()