MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)

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

  • Warum ?
    Warum sendet man 5 MySQL Abfragen zum MySQL Server und wartet 5 MAL bis der MySQL Server die Abfragen verarbeitet und zurücksendet.


    Was wird wohl um einiges besser sein ?

    SQL
    UPDATE `accounts` SET `Level` = '*ZAHL*' WHERE `Name` = '*NAME*'
    UPDATE `accounts` SET `Geld` = '*ZAHL*' WHERE `Name` = '*NAME*'
    UPDATE `accounts` SET `Kills` = '*ZAHL*' WHERE `Name` = '*NAME*'
    UPDATE `accounts` SET `Tode` = '*ZAHL*' WHERE `Name` = '*NAME*'
    UPDATE `accounts` SET `Health` = '*ZAHL*' WHERE `Name` = '*NAME*'


    oder so alles auf einmal:

    SQL
    UPDATE `accounts` SET `Level`='*ZAHL*', `Geld`='*ZAHL*', `Kills`='*ZAHL*', `Tode`='*ZAHL*', `Health`='*ZAHL*' WHERE `Name` = '*NAME*'


    Und hier das gleiche Problem:
    stock LoadPlayer(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); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
    }
    return 1;
    }
    Bei LoadPlayer wird das an mysql-Abfragen gesendet:

    SQL
    SELECT `Level` FROM `accounts` WHERE `Name` = '*NAME*'
    SELECT `Geld` FROM `accounts` WHERE `Name` = '*NAME*'
    SELECT `Kills` FROM `accounts` WHERE `Name` = '*NAME*'
    SELECT `Tode` FROM `accounts` WHERE `Name` = '*NAME*'


    4 mal mysql_store_result usw, obwohl es auf einmal auch geht:


    SQL
    SELECT `Level`,`Geld`,`Kills`,`Tode` FROM `accounts` WHERE `Name` = '*NAME*'



    So wie hier im Forum MySQL in SA-MP genutzt wird ist es sicher langsamer als jede andere Speichermethode und noch dazu ohne Threaded queries damit der Server anfängt zu hängen und alles zu ruckeln beginnt.

  • An und für sich klingt dein Tutorial nach vollziehbar, und wird sicherlich für den einen oder anderen Hilfreich sein.


    Lediglich hast eine falsche Aussage bezüglich MySQL gemacht.



    Zitat


    Die Frage lässt sich ganz gut mit stichworten beantworten.
    MySQL ist


    • Schneller als die ganzen File Systems (dini, fini, SSI etc.)
    • Übersichtlicher und leichter zu kontrollieren wenn etwas nicht stimmt
    • Extern!


    Diese Aussage ist nicht ganz richtig, denn alle Dateien die Lokal auf deinem Server sind, sind durch aus schneller lesbar als eine Extern Liegende Datei/Tabelle die erst abgerufen werden muss. Man sieht vllt nicht direkt den Unterschied, weil beides nur im Milli Sekunden Bereich liegt, und wir somit das ganze kaum bis garnicht mitkriegen. Allerdings besteht ja keine bzw sehr sehr geringe Latenz zwischen deiner Lokalen Datei und dem Server. Bei MySQL ist dass dann wieder anders.

  • moin zusammen.


    erstmal tolles tut 10/10


    ich hab ein problem mit dem float. ich bin gerade dabei mein eigenes geld system zu schreiben und hänge fest.
    habe mir das geld system von 8d angesehn und fand das ja auch schon gut aber
    ich wollte ein eigenes mit float. hab schon einiges versucht aber nichts geht. in der datenbank und im
    textdraw wird es schon richtig angezeit.


    um mein problem verständlich zu machen nehme ich das von 8D als beispiel:

    new euro,cent;
    if(sscanf(inputtext,"p,dd",euro,cent))return SCM(playerid,Rot,"Achte darauf den Betag richtig einzugeben [Beispiel: 3,99]");
    if(!EnoughCash(playerid,euro,cent))return SCM(playerid,Rot,"Du hast nicht genug Geld auf der Hand!");
    GivePlayerCashBank(playerid,euro,cent);
    GivePlayerCash(playerid,-euro,-cent);

    jetzt hab ich das geld 2 interger gesplittet.
    und zu meiner frage. wie setze ich das jetzt auf float um das ich anstatt euro und cent nur einen betrag mit 2 stellen nach dem punkt bekomme.


    schonmal ein dickes danke voraus
    mfg nicki85


    //edit: rechtschreibung

    Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher.
    "Albert Einstein"

  • Habe ein Fehler
    Zeile (81) : error 001: expected token: ";", but found "public"
    Hier ist es Zeile 6,und ich weiß nicht woran es liegt.



    public OnPlayerDisconnect(playerid, reason)
    SavePlayer(playerid)




    public OnPlayerSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    Ihr sucht ein RL Server der euch jeden Tag Spaß bereitet?Dann kommt auf gtaRL.de und meldet euch an:)

    Einmal editiert, zuletzt von Borussia_gtaRL ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • stock LoadPlayer(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); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
    }
    return 1;
    }


    Ihr sucht ein RL Server der euch jeden Tag Spaß bereitet?Dann kommt auf gtaRL.de und meldet euch an:)

  • Tausch das mal aus


    das:
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    zu
    GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));


    und zum Speichern so:
    das:
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    zu:
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);

    All in all it's just another brick in the wall

  • Hmm klappt nicht mehr,Error
    Zeile (380) : error 001: expected token: "-string end-", but found "-identifier-"
    Zeile (380) : error 001: expected token: ";", but found ")"
    Zeile (380) : error 029: invalid expression, assumed zero
    Zeile (380) : fatal error 107: too many error messages on one line


    GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" SpielerInfo[playerid][pName]));


    Ihr sucht ein RL Server der euch jeden Tag Spaß bereitet?Dann kommt auf gtaRL.de und meldet euch an:)

  • ich habs mein Fehler nicht gesehen :D


    Mach ma das
    GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" SpielerInfo[playerid][pName]));
    zu
    GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" ,SpielerInfo[playerid][pName]));
    villeicht siehst du den kleinen Fehler

    All in all it's just another brick in the wall

  • Problem noch:
    Tod wird nicht gezählt in der DB.
    Health wird nicht angezeigt,wenn ich zb 50 Health eingeben habe ich ig 100Health.
    Kriege ig nur CJ Skin,egal welche Skin ID ich in die DB eingeben :(


    Ihr sucht ein RL Server der euch jeden Tag Spaß bereitet?Dann kommt auf gtaRL.de und meldet euch an:)

    Einmal editiert, zuletzt von Borussia_gtaRL ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen