Guten Tag,
Ich bin dabei meinen Server auf MySQL umzurüsten.
Vorhin war ein Dateisystem gängig.
Dazu habe ich bei OnPlayerConnect eine Funtkion erstellt,
die die Spielerdateien auslesen und in die MySQL-Tabelle speichert.
Funktioniert, ABER:
Jedesmal beim Überschreiben bleibt der Server für ca. 10 Sekuden stehen.
Das war bei dem Dateisystem nie der Fall.
Code
new dateipfad[35],string[256];
format(dateipfad,sizeof(dateipfad),"%s.ini",Spieler[playerid][Name]);
if(fexist(dateipfad))
{
new dateipfad2[50];
format(dateipfad2,sizeof(dateipfad2),"Backups/%s.ini",Spieler[playerid][Name]);
SendClientMessage(playerid,0xE3654DFF,"Dein Account wird nach MySQL umgeschrieben, bitte warten...");
format(string,sizeof(string),"INSERT INTO Accounts (Name) VALUES ('%s')",Spieler[playerid][MySQL_Name]);
mysql_query(string);
new File:datei=fopen(dateipfad,io_read);
new File:datei2=fopen(dateipfad2,io_write);
for(new i=0;i<108;i++)
{
new wert[100],param[50];
fread(datei,string);
fwrite(datei2,string);
strmid(param,string,0,strfind(string,"=",true));
strmid(wert,string,strfind(string,"=",true)+1,strlen(string));
switch(i)
{
case 0,3,92,106: format(string,sizeof(string),"UPDATE Accounts SET %s = '%s' WHERE Name = '%s'",param,wert,Spieler[playerid][MySQL_Name]); //String-Variablentyp
case 50,51,59,60,61: format(string,sizeof(string),"UPDATE Accounts SET %s = '%f' WHERE Name = '%s'",param,floatstr(wert),Spieler[playerid][MySQL_Name]); //Flaot-Variablentyp
default: format(string,sizeof(string),"UPDATE Accounts SET %s = '%i' WHERE Name = '%s'",param,strval(wert),Spieler[playerid][MySQL_Name]); //Integer-Variablentyp
}
mysql_query(string);
}
fclose(datei);
fclose(datei2);
fremove(dateipfad);
SendClientMessage(playerid,0xE3654DFF,"Dein Account wurde erflogreich umgeschrieben!");
}*
Alles anzeigen
Erklärung zu
Code
switch(i)
{
case 0,3,92,106: format(string,sizeof(string),"UPDATE Accounts SET %s = '%s' WHERE Name = '%s'",param,wert,Spieler[playerid][MySQL_Name]); //String-Variablentyp
case 50,51,59,60,61: format(string,sizeof(string),"UPDATE Accounts SET %s = '%f' WHERE Name = '%s'",param,floatstr(wert),Spieler[playerid][MySQL_Name]); //Flaot-Variablentyp
default: format(string,sizeof(string),"UPDATE Accounts SET %s = '%i' WHERE Name = '%s'",param,strval(wert),Spieler[playerid][MySQL_Name]); //Integer-Variablentyp
}
bei 'case 0,3,92,106' (das sind die Zeilen) formt er einen String um.
bei 'case 50,51,59,60,61' formt er eine Floatvariable um.
bei 'default' ist ein Integer.
LG
Pille