MySQL auslesen mit sscanf

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
  • Hey kann mir einer sagen wie ich den befehl zu machen habe mit sscanf?


    habe die zeile schon bereit..


    sscanf(string, "p<|>e<s[24]s[128]iiis[128]s[128]iiiiiiis[24]s[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffiiffiiiiii>", SpielerInfo[playerid]);


    ob das mit dem p | e richtig ist weiß ich nicht
    habe das so verstanden das er aus dem enum SpielerInfo von playerid dan durchgeht
    und der sscanf mit p<|> gesplittet wird also unter einander


    ansonsten sind halt alle variablen da eingetragen.. ja es sind viele passt das alles in eine zeile?
    brauche halt nur noch den query sag ich mal :/
    kann mir da wer helfen das zusammenzubasteln?

    Entspurt!!!
    Ihr dürft euch noch für die Closed Beta eintragen!!!
    Es wird der Hamma, einige User freuen sich bereits!!!


    http://www.another-day.de

  • p<|> , p ist ein Specifer der dafür sorgt das der string nach dem delimiter | gesplittet wird.
    du könntest also das Zeichen | gegen ein , Ersetzen und er würde danach den string ab der stelle splitten wo er ein Komma findet.


    e steht für Enum daher kannst du die werte welche gesplittet werden direkt konvertieren und an das Array weitergeben mit dem Enum als Index.



    Den String bekommst du über mysql_fetch_row_format oder mysql_fetch_row ob beide enthalten sind ist plugin abhängig.
    Bei der Version von BlueG r5 - r6 ist das vorhanden.


    daher



    new string[800];
    mysql_query("SELECT * FROM `tabelle` WHERE `Name`= 'IPrototypeI'");
    mysql_store_result();
    mysql_fetch_row_format(string);
    sscanf(string, "p<|>e<s[24]s[128]iiis[128]s[128]iiiiiiis[24]s[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffiiffiiiiii>", SpielerInfo[playerid]);
    mysql_free_result();


    dann wird der string danach welcher bei mysql_fetch_row_format zurück gegeben wird gesplittet


    Syntax von mysql_fetch_row_format


    mysql_fetch_row_format(string[], const delimiter[], connectionHandle);


    Hier kannst du den delimiter ändern zum Beispiel zum Komma "," oder was auch immer standartmäßig wird dieses Zeichen verwendet |.
    Es ist das Zeichen welches die ausgelesenen Ergebniss der Spalten trennt in dem string.


    Fehler, welche passieren können ist, wenn der string zu kurz ist oder die Abfolge der Specifer nicht stimmen. So bleibt das Ergebniss leer und "nix" wurde geladen.

  • Hey also derzeit ist nichts passiert hier ist mal der log hilft das iwie?


    Muss ich noch iwas einfügen oder wie mache ich das?

    Ich hoffe dir ist bewusst das dies nur ein beispiel ist

    mysql_query("SELECT * FROM `tabelle` WHERE `Name`= 'IPrototypeI'");


    du solltest schon den string mit deinem Namen formatieren


    Du hast das so in deinem skript drinne stehen
    CMySQLHandler::Query(SELECT * FROM `tabelle` WHERE `Name`= 'IPrototypeI') - An error has occured. (Error ID: 1146, Table 'neuanfang2.tabelle' doesn't exist)


    Da ist es klar das erstmal die tabelle mit dem namen tabelle nicht existiert als auch der User du musst das query schon deiner Datenbankstruktur anpassen

  • HAHAH xD aäähh upsi :D
    hatte auf das select nicht geguckt weil cih das selber schon hatte ich schau mal nochmal :D
    danke


    peinlich peinlich :P




    //edit geht leider trotzdem nicht :(


    Habe die aktelle datei nochmal geladen..
    Ließt der nur eine reihe oder was ?


  • stock SpielerLaden(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    new string[800];
    mysql_query("SELECT * FROM `SpielerKonten` WHERE `Name`= 'pName'");
    mysql_store_result();
    mysql_fetch_row_format(string);
    sscanf(string, "p<|>e<s[24]s[128]iiis[128]s[128]iiiiiiis[24]s[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffiiffiiiiii>", SpielerInfo[playerid]);
    mysql_free_result();
    }
    return 1;
    }


    Wird aufgerufen bei login bzw nach register
    meinst du den teil oder was?

    Entspurt!!!
    Ihr dürft euch noch für die Closed Beta eintragen!!!
    Es wird der Hamma, einige User freuen sich bereits!!!


    http://www.another-day.de

  • stock SpielerLaden(playerid)
    {
    if(IsPlayerNPC(playerid))return 1;
    new string[800],esString[MAX_PLAYER_NAME];
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    mysql_real_escape_string(SpielerInfo[playerid][pName],esString);
    format(string,100,"SELECT * FROM `SpielerKonten` WHERE `Name`= '%s' LIMIT 0,1",esString);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row_format(string);
    sscanf(string, "p<|>e<s[24]s[128]iiis[128]s[128]iiiiiiis[24]s[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[128]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffiiffiiiiii>", SpielerInfo[playerid]);
    return mysql_free_result();
    }


    mysql_format und den platzhalter %e kann man auch verwenden beim formatieren jedoch bnötigt man dazu noch den verbindungshandler und das jetzt zu suchen und da einzutragen wollte ich dir ersparen.


    //edit
    Ahja es macht kein SInn abzuprüfen ob der Spieler verbunden ist da wenn diese funktion aufgerufen wird der Spieler zu 100% auf dem Server sein wird.
    Zum Thema splitten
    Die Abfolge an Variabeln im Enum muss der, der Tabelle entsprechen



    Zum Thema Plugin , solltest du dich ein wenig damit auskennen so empfehle ich dir dan umzusteigen entweder auf die r7 r33 oder dan schon höher Version von BlueG/ maddinat0r oder auf das MySQL & PostgreSQL Plugin von Dan.. , weil diese sind die zwei besten MySQL Plugins momentan

    Einmal editiert, zuletzt von IPrototypeI ()

  • Also die Reiehnfolge ist die aus dem Enum


    ja SpielerLaden wird erst abgerufen wenn er sich erfolgreich eingeloggt bzw registriert hat
    aber die npcs überspringen das laden ja oder wegen dem isplayernpc so wie du es hast



    also mysql ist mehr oder weniger neuland hatte schon probleme mit speichern xD
    benutze ein MySQL plugin R5 das steht zumindest im log xD
    MySQL plugin R5 successfully loaded.


    Solange ich das system nicht umschreiben muss spring ich auch auf andere xD




    //edit


    error 017: undefined symbol "query"
    mysql_query(query);

    Entspurt!!!
    Ihr dürft euch noch für die Closed Beta eintragen!!!
    Es wird der Hamma, einige User freuen sich bereits!!!


    http://www.another-day.de


  • Man sollte sich eine basis schaffen bevor man weiter springt


    Da Thread Querys und Caching was anderes ist und bevor man an sowas ran geht sollte man auch wissen was man macht um sein horizont zu erweitern und um mit neuem effizent umzugehen.
    Ich weiß ja nicht ob du schonmal was von einem hermeneutischen zirkel gehört hast.
    Aber ich sags mal so wenn du richtig einsteigen willst wird das noch erbärmlicher als das was du momentan schon postest.


    Ich zitiere

    Zitat

    error 017: undefined symbol "query"
    mysql_query(query);


    Ich hatte davor noch was anderes dort stehen und hab das nicht entfernt und es sollte logisch auf der Hand liegen das dort der string mit dem SQL Befehl rein muss
    mysql_query(string);