MySQL INC -> ADreNaLiNe's SAMP MySQL Plugin

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
  • Da ich in letzter Zeit häufiger Fragen zu MySQL lese, veröffentliche ich hier mal meine INC Datei mit nützlichen Funktionen, um schneller und einfacher auf eine DB zuzugreifen. Natürlich wird beim Aufruf eines SQL Statements geprüft, ob eine Verbindung zur DB besteht. Falls nicht, wird versucht, sie herzustellen.


    Wenn man diese INC in sein Script einbindet, muß man nur noch folgende String setzen:
    MYSQL_HOST="";
    MYSQL_DB="";
    MYSQL_USER="";
    MYSQL_PASS="";


    Ich denke mal, ich brauche hier nichts zu erklären. Hier nun der Downloadlink und die Befehlsübersicht.


    PS.:
    In der INC ist noch der PW Hash aus der DUDB.INC drin, da ich ihn brauche und nicht extra die DUDB.INC einbinden wollte.


    breadfish.de/wcf/attachment/788/


    :: Befehlsübersicht:
    - OpenMySQL() - Liefert 0 oder 1 zurück (0 false / 1 true bzw. Zugriff zur DB erfolgreich)


    - CloseMySQL() - Liefert 0 oder 1 zurück (0 false / 1 true bzw. Zugriff zur DB erfolgreich)


    - QueryMySQL(field[],table[],where[],option[]) - Liefert Anzahl der Zeilen zurück. (WHERE und OPTION sind hierbei optional)
    QueryMySQL ist aufgebaut wie ein SELECT Statement von MySQL. Beispiel.: SELECT Feld1, Feld2, Feld8 FROM tabelle WHERE Feld1='89' LIMIT 1

    - InsertMySQL(table[],field[]) - Liefert 0 oder 1 zurück (1 = Daten erfolgreich in Tabelle eingefügt)


    - UpdateMySQL(table[],set[],where[]) - Liefert 0 oder 1 zurück. (1 = Daten erfolgreich in Tabelle aktualisiert)


    - DeleteMySQL(table[],where[]) - Liefert 0 oder 1 zurück. (1 = Daten erfolgreich in Tabelle gelöscht)


    - ReadMySQL() - Liefert Zeile zurück, welche mit strtok gesplittet werden muß
    Anmerkung: ich habe diese Funktion nur proforma eingebaut - selber nutze ich sie aber nie!


    Folgende Befehle funktionieren nur in Verbindung mit QueryMySQL:
    - GetMySQLField_Int("Spaltenname") - Liefert einen Integerwert zurück
    - GetMySQLField("Spaltenname") - Liefert einen String zurück
    - GetMySQLField_Float("Spaltenname") - Liefert einen Floatwert zurück



    Hier noch ein kleines Beispiel:
    Oben in deinem PAWN Code natürlich folgendes einfügen, sonst klappts net ;)


    #include <mysql>


    new mysqlresult[1024];


    Beispiel für das Auslesen:

    new Float:var,var2=0,var3[256];


    if (QueryMySQL("*","tabellenname","","")>0)
    {
    while(samp_mysql_fetch_row(mysqlresult))
    {
    var=GetMySQLField_Float("Floatfeld");
    var2=GetMySQLField_Int("Integerfeld");
    var3=GetMySQLField("Stringfeld");


    printf("Floatfeld:%f - Integergeld:%d - Stringfeld:%s",var,var2,var3);
    }
    }



    Beispiel für Einfügen von Daten:
    new mystr[256];
    new Float:health,alter,name[32];
    alter=22; name="Candy"; health=100.0000;
    format (mystr,sizeof(mystr),"Name='%s', Alter='%d', Gesundheit='%f'",name,alter,health);
    if (!InsertMySQL("tabelle",mystr)) {print("Daten konnten nicht eingefügt werden!");}



    Beispiel für das Aktualisieren vorhandener Daten:
    new mystr[256];
    format (mystr,sizeof(mystr),"Alter='%d', Gesundheit='%f'",name,alter,health);
    if (!UpdateMySQL("tabelle",mystr,"Name='Candy'")) {print("Daten konnten nicht aktualisiert werden!");}



    Löschen von Daten:
    if (!DeleteMySQL("Tabelle","Name='Candy'")) {print("Daten konnten nicht gelöscht werden!");}

    Einmal editiert, zuletzt von Woozie ()

  • Jap. G_sTyLeZzZ hat auch ein MySQL Plugin gecodet. Vielleicht kennst du die Funktion daher.


    Hier der Link:
    Alternative MySQL Plugin v1.0


    Edit: 500. Beitrag >:)


    Edit 2: Übrigens Woozie, würde ich bei mysql_fetch_row kennzeichnen dass der Parameter ein String ist. Ansonsten kanns zu Verwirrung kommen ;)

    Einmal editiert, zuletzt von [NSG]Bright ()

  • Ich weiß, dass dieses Thema schon alt ist, aber das ist momentan das einzige SQL-Inc, dass ich ziemlich gut verstehe :rolleyes:
    Nunja ein Problem hätte ich da...


    Immer wenn ich irgendeins der Beispiele ausprobiere(beim Auslesen ist beim "Integerfeld" ein "=" zuviel ), stürzt mir der sa-mp server ohne Fehlermeldung ab. Und ja ich habe die libmysql.dll im Server-Verzeichnis sowie die sampmysql.dll im Plugin-Verzeichnis und ich habe sogar in der server.cfg bei "Plugins" sampmysql hingeschrieben, aber trotzdem schmiert er ab. 8|
    Sobald ich den Beispielcode(egal welchen der 4) wieder raus mache, geht alles Fehlerfrei...
    Bei dem Plugin, das ich nicht verstehe, funzt alles fehlerfrei nur da versteh ich den fetchdings nich, und hier schon, da ein Beispiel dabei ist :P
    Deswegen wärs nett, falls mir jemand erklären könnte was ich falsch gemacht oder vergessen haben könnte.


    €: Ach ja ne DB ist da :P und sie hat auch alle Tabellen/Spalten, die nötig wären.


  • #include <mysql>
    new mysqlresult[1024];


    haste oben aber drin oder? Gibt es Kompilierfehler?
    Schau mal in der Server.log nach, was für ne Meldung beim Crash kommt.
    So einen Absturz kenn ich nur, wenn die gewünschte Tabelle nicht existiert oder ein Feld nicht so heisst, wie gewünscht.

  • das von Adrenalin hat zum Teil viele Speicherfehler & Lücken , das von gStylez wie auch immer würde ich ebenso nicht verwenden,
    das in Sa-mp implementierte SqlLite reicht vollkommen.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Ich habe da ein problem
    und zwar da dies nicht so weitergehen kann wie unten steht muss ich da was anderes konstruieren sozusagen

    new mystr[256];
    format (mystr,sizeof(mystr),
    "Name='%s',Admin='%d',Kills='%d',Deaths='%d',Logins='%d',Freischaltung='%d',X='%f',Y='%f',Z='%f',CX='%f',CY='%f',CZ='%f',HX='%f',HY='%f',HZ='%f',Crashed='%d',Skin='%d',Polizist='%d',PolizeiSkin='%d',ADAC='%d',ADACSkin='%d'",
    tname,
    tadmin,
    tkills,
    tdeaths,
    tlogins,
    tfrei,
    tx,
    ty,
    tz,
    tcx,
    tcy,
    tcz,
    thx,
    thy,
    thz,
    tcrash,
    tskin,
    tpolizei,
    tpolizeiskin,
    tadac,
    tadacskin);
    if (!InsertMySQL("tabelle",mystr)) {printf("Daten konnten nicht eingefügt werden!");}
    im Grunde möchte ich nur fragen wie ich das so hinbekomme


    new mystr[256];
    format (mystr,sizeof(mystr),"Name='%s'",PlayerName(playerid));
    if (!InsertMySQL("tabelle",mystr)) {printf("Daten konnten nicht eingefügt werden!");}
    format (mystr,sizeof(mystr),"Admin='%d'",Account[playerid][Admin]);
    if (!InsertMySQL("tabelle",mystr)) {printf("Daten konnten nicht eingefügt werden!");}


    versteht ihr??



    2 Mal editiert, zuletzt von Tomi93 ()

  • Nabend^^


    Leider bekomme ich einen Error bei dem MySQL Plugin oO


    gamemodes\tl1.pwn(11) : error 010: invalid function or declaration


    Linie 11: MYSQL_HOST="localhost";


    Hier das ganze Script (Blank-Script by Pawno Editor :D )
    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT


    #include <a_samp>
    #include <a_sampmysql>
    #include <mysql>


    new mysqlresult[1024];


    MYSQL_HOST="localhost";
    MYSQL_DB="datenbnk";
    MYSQL_USER="root";
    MYSQL_PASS="passwort";


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    public OnGameModeInit()
    {


    new Float:var,var2=0,var3[256];


    if (QueryMySQL("*","user","","")>0)
    {
    while(samp_mysql_fetch_row(mysqlresult))
    {
    var=GetMySQLField_Float("Floatfeld");
    var2=GetMySQLField_Int("Integerfeld");
    var3=GetMySQLField("Stringfeld");


    printf("Floatfeld:%f - Integergeld:%d - Stringfeld:%s",var,var2,var3);
    }
    }


    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    return 1;
    }


    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;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
    // Do something here
    return 1;
    }
    return 0;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }


    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }


    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }


    public OnRconLoginAttempt(ip[], password[], success)
    {
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    return 1;
    }


    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }


    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    return 1;
    }


    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }


    Bitte um Hilfe ;(