MySQL - Accountexistenz abfragen

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,
    mal wieder ein MySQL Problem.


    Ich möchte checken, ob mein Name in der Spielerdatenbank eingetragen ist.
    Code:
    stock AccountCheck(playerid)
    {
    new bedien[104];
    format(bedien,104,"name='%s'",pname[playerid]);
    format(query,sizeof(query),"SELECT * FROM accounts WHERE %s",bedien);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows()){mysql_free_result(); return 1;}
    else {mysql_free_result(); return 0;}
    }
    Gibt nur leider einen MySQL-Error bei der Abfrage:

    SQL
    Error (0): Failed to exeute query. Unknown column 'Firerfan' in 'where clause'.
  • Ich glaub die Antwort liegt auf der Hand. Übersetz das mal ins deutsche. Solltest du es nicht rausfinden, befass dich mit den Basics von sql-abfragen.


    TIP:

    SQL
    WHERE bedin1='bedin2'
  • Übersetzung ins Deutsche:
    Fehler beim Ausführen der Abfrage. Unbekannte Spalte "Firerfan" in "where clause"...
    Muss ich ein Wort anders abfragen als eine Zahl?


    Wenn nein, wieso funktioniert es problemlos, wenn ich ID's abfrage?

  • Ich verstehs immernoch nicht.
    Sorry wenn ich jetzt hier gerade so rüber komme, als ob ich 0 Plan von nichts hätte.
    Nur habe ich mich nochnicht mit MySQL in PAWN beschäftigt.


    In PHP Funktioniert diese Abfrage vollkommen Fehlerfrei.
    Ich habe echt keine Ahnung, an was es denn liegen könnte.



    Nach meiner Information, wird ja somit die abfrage aussortiert, wo der sich in der Spalte "name" der Wert "Firerfan" befindet, oder etwa nicht?
    Es funktioniert ja sogar, nur nerven die MySQL-Errors X(

  • Also, ich versteh ja nicht, wie das in PHP funktionieren soll.
    Du brauchst doch 2 Bedingung um genau, diese eine Person zu ermitteln. (Fiktiv ist nun gerade die Person, kann ja auch was anderes sein.)
    Richtige wäre folgendes:

    SQL
    "SELECT * FROM table WHERE name='%s'"



    Somit weist du an, dass er in der Spalte "name" nach dem Spielernamen, in diesem Fall "%s" sucht. Gibt es einen Treffer, gibt mysql_num_rows größer 0 zurück.

  • habe ich doch genau so:

    format(bedien,104,"name='%s'",pname[playerid]);
    format(query,sizeof(query),"SELECT * FROM accounts WHERE %s",bedien);


    In PHP:

    PHP
    $ergebnis = mysql_query("SELECT level FROM accounts WHERE name='$name'"); $level = mysql_fetch_row($ergebnis);


    Da werden halt Daten ausgelesen. Allerdings mit genau der selben Where-Bedingung
    Habe dort eine andere Methode, um zu überprüfen, ob der Account registriert ist.

  • Welches Plugin benutzt du?
    Ich habe mich erst verlesen. Aber ich glaube, dass dein Problem die: ' sind, entweder fehlen oder zu viel.

  • Bei dem Plugin solltest du mal folgendes Versuchen:


    SQL
    SELECT * FROM accounts WHERE name='%s'


    Außerdem, wie groß ist dein query?

  • Mein MySQL-Code:

    SQL
    SELECT * FROM accounts WHERE name='%s'


    Ja, hab ihn etwas verändert.
    Das 1te Format war unnötig^^


    EDIT:
    Mein Query ist 1024 Zeichen lang.
    Müsste ich auch mal verringern, abner ich habe erstmal zuviel genommen, als wenn nachher einige Teile nicht übertragen werden.
    Vorallem bei meinen Eingaben.

  • definier ihn mal auf 124 und teste es. Ich denke es sollte so gehen, wenn nicht solltest du im Plugin-Thread einmal nachfragen. Es kann viel mit den komischen "strichen" zusammenhängen.^^
    Ich persöhnlich nutze das von G-stylezz, gefällt mir besser.

  • Naja, der Query ist global definiert.
    Und zu der Sache mit dem anderen Plugin:


    Erst habe ich meinen GameMode von DINI auf SII umgeschrieben, dann von SII auf das MySQL Plugin und jetzt habe ich ganz ehrlich keine Lusst, alles nochmal umzuschreiben^^


    Was die Striche angeht...
    Hmm... schade das du keine Lösung kennst.
    Danke trozdem für deine Hilfe.



    Aber ich denke mal die Striche sind so richtig.


    Lasse mich aber auch gerne verbessern!




    MfG Firer



    //EDIT:
    Wortwahl...

  • Was dein Problemkreis verringern würde, ist das es du es einmal mit g-stylez seinem versuchst. Sollte dies da keinen Fehler geben, bist du schon mal schlauer.
    Es hilft meistens, den Fehlerkreis einfach "einzudämmen". Spontan fällt mir leider auch keine Lösung deines Problems ein.


    //edit:
    Vielleicht ein paar Lösungsvorschläge:

    • Ändere den Struktureintrag einfach mal um
    • lass bei %s einfach mal ' weg.
    • Füge überall ' ' hinzu
  • Am Plugin liegts sicher nicht :D


    Warum in PHP der Code funktioniert,
    ist ein Wunder ;)


    Wenn du weiterhin Hilfe möchtest,
    passe doch die Query an wie bisher mehrmals beschrieben und
    gib uns aktualisierte Fehlermeldungen.


    Deine Query ist einfach falsch,
    also akzeptier und lern es neu.
    MySQL hat außerdem eine eigene Dokumentation,
    google also bspw nach "mysql select", und du bekommst die richtige syntax

  • Trooper:
    Also, da habe ich schon mehrfach (leider) andere Erfahrungen machen müssen, mit den blöden "Strichen" und den verschiedenen Plugins.
    Naja, egal ;=)

  • Ohne die Striche: Funktion gibt falschen Wert zurück


    Mit den Strichen: MySQL gibt Errors aus:
    [Sun Mar 13 23:38:52 2011] Error (0): Failed to exeute query. Unknown column 'Firerfan' in 'where clause'.
    [Sun Mar 13 23:38:52 2011] Error (0): Function: mysql_store_result called when no prior successful query executed. Unknown column 'Firerfan' in 'where clause'.
    [Sun Mar 13 23:38:52 2011] Error (0): Function: mysql_num_rows called when no result stored. Unknown column 'Firerfan' in 'where clause'.


    Trooper:
    Alles klar, ich sehe ein das es Falsch sein muss.
    Aber wie ist dann die richtige Syntax?
    In der Dokumentation von MySQL Finde ich meine Methode.
    In PHP Funktioniert meine Methode.
    Ich habe mir auch diverse Tutorials durchgelesen, in denen dies so Funktioniert.


    //EDIT:
    Sogar im SA-MP Wiki steht diese Methode:
    http://wiki.sa-mp.com/wiki/MySQL_Plugin


  • Alles klar, ich sehe ein das es Falsch sein muss. //das ist gut
    Aber wie ist dann die richtige Syntax? //siehe oben, wurde mehrmals gesagt
    In der Dokumentation von MySQL Finde ich meine Methode. //nein, da steht "[where clausel]". Nimm es als if-bedingung
    In PHP Funktioniert meine Methode. //wie gesagt, man kann sich nur wundern, warum
    Ich habe mir auch diverse Tutorials durchgelesen, in denen dies so Funktioniert. //zeig sie doch mal bel gelegenheit ;)


    KOmmentare stehen hinter.


    @wiki:
    Der Artikel startet mit dem Beispiel:
    // in a login command
    mysql_query("SELECT * FROM `accounts` WHERE `username` = 'MyCoolNick' LIMIT 0,1", MYSQL_RESULT_LOGIN, playerid, connection);

    Deine Methode seh ich da nirgends