MySQL R5 Werte aus Tabelle auslesen

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 Abend zusammen,
    ich arbeite gerade zum ersten mal mit MySQL R5 und bin dabei mir ein Login/Register System zu erstellen. Nun ist jedoch beim Laden der Werte aus der Spieler Tabelle aufgefallen, dass es bei dieser MySQL Version garkeine richtige Funktion gibt, womit man den field_content schnell auslesen lassen kann. Es gibt lediglich die fetch_int,..., Funktionen, womit man jedoch nur einen einzigen Wert auslesen kann. Bei meiner Suche mit Google habe ich dann etwas mit "explode(row,field,"|");" gefunden, jedoch ist der Downloadlink zu diesem Include tot. Dann habe ich etwas mit "stock mysql_GetInt" gefunden, wo jedoch dieser stock keine Funktion hatte. Könnt ihr mir helfen, wie ich mit R5 die Werte aus den Feldern einer Tabelle auslesen kann und in einer enum Variable speichern kann?


    mfg
    DrMurphy


    //edit
    Habe es jetzt mal so gemacht:

    stock mysql_getIntWithInt(i[128], table[128], x[128], wert) //i ist der Spaltenname des gesuchten Werts. table ist der Name der Tabelle. x ist der Spaltenname des gegebenen Werts. wert ist der gegebene Wert
    {
    new integer;
    new query[128];
    format(query,sizeof(query),"SELECT `'%s'` FROM `'%s'` WHERE `'%s'`='%i'",i,table,x,wert);
    mysql_query(query,dbhandle);
    mysql_store_result(dbhandle);
    integer = mysql_fetch_int(dbhandle);
    mysql_free_result(dbhandle);
    return integer;
    }

    Könnte das funktionieren?

  • So sollte es funktionieren:


    stock mysql_getIntWithInt(i[], table[], x[], wert) //i ist der Spaltenname des gesuchten Werts. table ist der Name der Tabelle. x ist der Spaltenname des gegebenen Werts. wert ist der gegebene Wert{
    new integer;
    new query[128];
    format(query,sizeof(query),"SELECT `'%s'` FROM `'%s'` WHERE `'%s'`='%i'",i,table,x,wert);
    mysql_query(query,dbhandle);
    mysql_store_result(dbhandle);
    integer = mysql_fetch_int(dbhandle);
    mysql_free_result(dbhandle);
    return integer;
    }


    - niklasbollmer

  • ich habe es jetzt noch etwas weiter abgeändert, da die variablen im samp wiki auch immer ein const haben, wenn es strings sind:

    stock mysql_getIntWithInt(const i[], const table[], const x[], wert)
    {
    new integer;
    new query[128];
    format(query,sizeof(query),"SELECT `'%s'` FROM `'%s'` WHERE `'%s'`='%i'",i,table,x,wert);
    mysql_query(query,dbhandle);
    mysql_store_result(dbhandle);
    integer = mysql_fetch_int(dbhandle);
    mysql_free_result(dbhandle);
    return integer;
    }

    ausprobiert habe ich es nocht nicht, da das system noch nicht fertig ist. dazu komme ich erst morgen abend. Trotzdem danke :)

  • Du willst also etwas aus einer Tabelle laden & in ein Enum übertragen?
    Mach es einfach so:
    stock LoadPlayer(playerid)
    {
    if(!IsPlayerNPC(playerid))//ist eigentlich irrelevant, kommt darauf an, wie du deinen stock aufrufst
    {
    new idx,
    result[500];
    format(result, 128, "SELECT * FROM `/*name der tab*/` WHERE `name` = '%s'", PlayerName(playerid));//ich gehe davon aus, dass du die Spalte "Name" hast.
    mysql_query(result);
    mysql_store_result();
    while(mysql_fetch_row_format(result, "|"))
    {
    sscanf(result, "p<|>{i}s[30]s[30]iiiiiiis[30]",/*enumname*/[idx]);//nur als bsp.
    // p<|>trennt die einzelnen werte mit einem |
    // { i} = irrelevanter integer. Wenn du z.b in deiner Tabelle deine Spieler mittels AI hochzählst, kannst du diese var überspringen, falls du keine verwendung hast. -> {} //überspring die var in der db.
    // s = string..(Name, etc)
    // f = Float(pos, hp etc)
    // Wenn du das dann angegeben hast (Es muss alles, was in der DB steht, auch im "sscanf teil" stehen. wenn du eine var nicht brauchst -> {}.
    // Nun werden die Daten in das(den?) Enum geladen.
    idx ++;//erhöhung, wegen while()
    }
    mysql_free_result();

    return 1;
    }


    Habs' mal so geschrieben. Ist ungetestet. Sollte aber vom Prinzip her funktionieren.


    (zu faul den code richtig einzurücken