MySQL

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 liebe Com,


    ich versuche mich mit MySQL vertraut zu machen und habe deswegen ein paar Fragen:
    Ich habe folgenden Code per Copy & Paste ins Script getan:


    stock MySQL_exist(playerid)
    {
    new string[128],name[MAX_PLAYER_NAME],count;
    mysql_real_escape_string(Spieler[playerid][Name],name);
    format(string,sizeof(string),"SELECT * FROM accounts WHERE Name = %s", name);
    mysql_query(string);
    mysql_store_result();
    count=mysql_num_rows();
    mysql_free_result();
    if(count>0) count=1;
    else count=0;
    return count;
    }


    mysql_real_escape konvertiert alle Zeichen, die MySQL nicht erkennt, in welche,
    die er erkennt, oder?


    mysql_query schickt den formatierten Befehl, der den Spielernamen sucht.


    Die Frage:
    Was macht mysql_store?
    Was macht mysql_free_result?
    Was macht mysql_num_rows?


    Bitte schickt mir keinen WIkipedialink, ich verstehe das nur,
    wenn mir das jemand verständlich auf Deutsch erklärt.


    LG
    Pille

  • Zitat

    mysql_real_escape konvertiert alle Zeichen, die MySQL nicht erkennt, in welche,
    die er erkennt, oder?

    Weiss nicht genau was du damit meinst. welche zeichen sollten denn unbekannt sein?

    Zitat

    Was macht mysql_store?

    store_result speichert das ergebniss (sagt der name der funktion ja eigentlich schon^^), der vorherigen query.

    Zitat

    Was macht mysql_free_result?

    free_result gibt den speicher wieder frei.

    Zitat

    Was macht mysql_num_rows?

    num_rows gibt die anzahl an reihen zurück.

    The fact is, I am right. And if you think I'm wrong, you are wrong.


  • Sauber erklärt ^^ Werde ich in mein Buch eintragen ;]


    Gruss: Sonic

    I didn't hit you. I high fived your face.


  • Weiss nicht genau was du damit meinst. welche zeichen sollten denn unbekannt sein?


    Ich weiß nicht, was macht der denn sonst? ^^




    store_result speichert das ergebniss (sagt der name der funktion ja eigentlich schon^^), der vorherigen query.


    Welches Ergebnis und worein speichert er das?



    free_result gibt den speicher wieder frei.


    Was passiert wenn man das nicht macht?



    num_rows gibt die anzahl an reihen zurück.


    Also er prüft eine Zeile, ob die dem gesuchten entspricht, wenn nicht,
    dann gibt er +1 zurück, bis ers gefunden hat?

  • Zitat

    Welches Ergebnis und worein speichert er das?


    In die MySQL Rams..


    Zitat

    Was passiert wenn man das nicht macht?


    Füllt es die MySQL Rams bis der MySQL Server anfängt zu laggen und abscheisst...


    Zitat

    Also er prüft eine Zeile, ob die dem gesuchten entspricht, wenn nicht,
    dann gibt er +1 zurück, bis ers gefunden hat?


    Wente so willst gibt er dir den MySQL Wert der gesaved ist aus.


    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • mysql_store_result: Speichert das Ergebnis der ausgeführten Query. Beispielsweise du verwendest "SELECT * FROM spielerdaten", dann ist das Ergebnis alles aus den Spielerdaten.
    mysql_free_result: Gibt das gespeicherte Ergebnis wieder frei, wenn du dies nicht machst, kommt es bei der nächsten Abfrage zu Fehlern.
    mysql_num_rows: Gibt an, wieviele "Ergebnisse" gefunden wurden. Beispielsweise die Query lautet: "SELECT * FROM spielerdaten WHERE Spielername='Test123', dann ist der zurückgegebene Wert die Anzahl der gefundenen Ergebnisse. Wenn der Spieler also einmal in der Datenbank gefunden wurde, ist das Ergebniss dementsprechend auch 1.




    BlackLegend

  • mysql_store_result: Speichert das Ergebnis der ausgeführten Query. Beispielsweise du verwendest "SELECT * FROM spielerdaten", dann ist das Ergebnis alles aus den Spielerdaten.


    Dann speichert MySQL alle Spielerdaten in den RAM?
    Wie kann ich sie im Script auslesen und in einerVariable speichern?

  • Genau er speichert alle Spielerdaten in den RAM.
    Wenn du jetzt die Daten von einem Spieler auslesen möchtest, verwendest du folgende Abfrage:


    SELECT * FROM spielerdaten WHERE Spielername='Test'


    Musst du natürlich noch an deine Tabelle anpassen, ist nur ein Beispiel.
    Jetzt kommts drauf an, welches MySQL Plugin du benutzt, bei dem von Strickenkid liest man ein Feld so aus:


    new daten[256];
    mysql_fetch_field("Level",daten); SpielerLevel = strval(daten);
    Achte dadrauf, dass du je nach Datentyp entweder floatstr (Floats), strval (Integer) oder strmid (Strings) verwenden musst
    um den Datenstring umzuwandeln bzw. zu übertragen.





    BlackLegend

  • Soo, ich bin dabei Daten auszulesen, was leider nicht klappt.


    stock AccountLaden(playerid)
    {
    new Int[5][20]={
    "Level",
    "Geld",
    "Adminlevel",
    "Fraktion",
    "Skin"
    };
    new string[100];
    for(new i=0;i<sizeof(Int);i++)
    {
    format(string,sizeof(string),"SELECT %s FROM accounts WHERE Name = %s",Int[i],Spieler[playerid][MySQL_Name]);
    mysql_query(string);
    mysql_store_result();
    switch(i)
    {
    case 0: Spieler[playerid][Level]=mysql_fetch_int();
    case 1: Spieler[playerid][Geld]=mysql_fetch_int();
    case 2: Spieler[playerid][Adminlevel]=mysql_fetch_int();
    case 3: Spieler[playerid][Fraktion]=mysql_fetch_int();
    case 4: Spieler[playerid][Skin]=mysql_fetch_int();
    }
    mysql_free_result();
    }
    return 1;
    }

  • Ich glaube das sollte den Fehler schon beheben:


    stock AccountLaden(playerid)
    {
    new Int[5][20]={
    "Level",
    "Geld",
    "Adminlevel",
    "Fraktion",
    "Skin"
    };
    new string[100];
    for(new i=0;i<sizeof(Int);i++)
    {
    format(string,sizeof(string),"SELECT %s FROM accounts WHERE Name = '%s'",Int[i],Spieler[playerid][MySQL_Name]);
    mysql_query(string);
    mysql_store_result();
    switch(i)
    {
    case 0: Spieler[playerid][Level]=mysql_fetch_int();
    case 1: Spieler[playerid][Geld]=mysql_fetch_int();
    case 2: Spieler[playerid][Adminlevel]=mysql_fetch_int();
    case 3: Spieler[playerid][Fraktion]=mysql_fetch_int();
    case 4: Spieler[playerid][Skin]=mysql_fetch_int();
    }
    mysql_free_result();
    }
    return 1;
    }



    BlackLegend

  • Dieses Zeichen dient zur Näheren Bestimmung von Daten. Meistens benutzt man ihn bei Strings (%s) bzw. generell Variablen.
    Wenn du ganz penibel sein willst machst du es so:

    SQL
    SELECT 'something' FROM 'somewhere' WHERE 'something' = 'something'


    Normalerweise reicht es aber wie gesag, diese Zeichen vor und nach Daten zu setzen, die Strings sind.





    BlackLegend