Och Mensch.
Dieser stock sendet immer 1 query pro field an die Datenbank...
Ist uneffizient.
(Ich weiß natürlich nicht, obs bei r34 auch so ist )
Och Mensch.
Dieser stock sendet immer 1 query pro field an die Datenbank...
Ist uneffizient.
(Ich weiß natürlich nicht, obs bei r34 auch so ist )
dein ernst?
1. wenn du so vorgehst, bringen dir die "ach so tollen" threads n scheiß
2. Ist das plugin ganz anders aufgebaut, wenn du es nicht verstehst wie man damit arbeitet sölltest du die finger davon lassen,
auch beim R5 finger weg von den stocks, das ist der sichere tod für dein server.
Guten Tag,
ein User hat dir bei einen der ersten Post's schon ein Tutorial Thread geschickt
Wo alles BESTENS erklärt ist
Sry, aber warum ließt du es nicht?
Da verstehe ich nicht warum du es dir nicht durchließt
Das würde 10000 mal schneller gehen
HIER, les es dir durch BITTE
Da lernst du es richtig. Was für dein weiteres verstehen wichtig ist
Also soll ich ohne stocks arbeiten?
@Music4You. Ich bin mir sicher ich kann gut scripten. Doch im MySQL Bereich bin ich nicht seit langem. Deshalb brauche ich Hilfe..
%e ist nicht %s! %e wurde extra eingebaut um zu escapen. Verwende nicht diese Funktionen (mysql_GetInt, mysql_GetString, ...) - diese sind für die Tonne und das waren sie schon immer.
Warum sollte man mysql_real_escape_string und mysql_format verwenden, wenn man nur mysql_format verwenden könnte?
Hey,
schau dir das Tutorial besser an.
Da wird das ganze Login u. Register system erklärt
Wie man richtig speichert bzw. Ressorcenschonend
Warum sollte man mysql_real_escape_string und mysql_format verwenden, wenn man nur mysql_format verwenden könnte?
Weil das genau das selbe ist, wie man sich stunden drüber streiten könnte, welche plugin version die bessere ist
Hier geht es nicht um eine Pluginversion, sondern darum etwas Umständliches einfacher zu gestalten.
Ok, wenn man die stocks nicht verwenden sollte, darf ich ziemlich viel in meinem Script umschreiben.
Habe bis jetzt immer mit denen gearbeitet.
bsp. hier:
Autos[playerid][2][Abgeschlossen] = mysql_GetInt("autosystem", "Abgeschlossen", "Besitzer", string);
Sollte ich dann da mit mysql_format arbeiten ? Oder was empfehlt ihr mir?
Ja, natürlich. mysql_format, SELECT, mysql_tquery, neuer Callback, dort weiterarbeiten.
2 letzte Dinge, worüber du dir Gedanken machen sollst: KISS, Bad Practice
Campbell, kannst du mir ein Beispiel geben für das?
Autos[playerid][2][Abgeschlossen] = mysql_GetInt("autosystem", "Abgeschlossen", "Besitzer", string);
new query[88];
mysql_format(handle, query, sizeof(query), "SELECT `Abgeschlossen` FROM `autosystem` WHERE `Besitzer` = '%e'", playerName);
mysql_tquery(handle, query, "OnSelectLockStatus", "ii", playerid, 2);
// Hier nun nichts mehr!
forward OnSelectLockStatus(playerid, vehicleIdx);
public OnSelectLockStatus(playerid, vehicleIdx) {
new rows,
fields;
cache_get_data(rows, fields);
if(rows > 0) {
Autos[playerid][vehicleIdx][Abgeschlossen] = cache_get_row_int(0, 0);
}
// Hier Rest des Scripts.
}
//Wo kommt dieser Teil hin? In das OnPlayerCommand?
new query[88];
mysql_format(handle, query, sizeof(query), "SELECT `Abgeschlossen` FROM `autosystem` WHERE `Besitzer` = '%e'", playerName);
mysql_tquery(handle, query, "OnSelectLockStatus", "ii", playerid, 2); // wofür steht hier das playerid und die 2? Und wo bleibt es zum Schluss?
forward OnSelectLockStatus(playerid, vehicleIdx);
public OnSelectLockStatus(playerid, vehicleIdx) {
new rows,
fields;
cache_get_data(rows, fields);
if(rows > 0) {
Autos[playerid][vehicleIdx][Abgeschlossen] = cache_get_row_int(0, 0); //Wofür steht das 0,0 ?
}
// Hier Rest des Scripts.
}
Und ist es bei den Floats und Strings das selbe Prinzip?
Ja, musst eben cache_get_row bzw. cache_get_row_float verwenden statt cache_get_row_int.
Erster Teil kommt dort hin, wo du den Query ausführen musst.
playerid und 2 steht für die playerid in Autos[playerid] und die 2 für die 2 in Autos[playerid][2]. Ich übergebe sie als Parameter zum Callback. playerid ist playerid in Callback und 2 vehicleIndex.
0, 0 steht bei cache_get_row für rowID 0 und fieldID 0.
Wenn du mehrere Rows hast:
new intValue;
for(new i = 0; i < rows; i++) {
intValue = cache_get_row_int(i, 0);
}
Die fieldID steht hierbei für:
Ok, das verstehe ich nun ein wenig.
Und wie mache ich das bei den Spielerdaten? Da hab ich endlos von den stocks..
stock LoadPlayer(playerid)
{
GetPlayerName(playerid, sSpieler[playerid][Name], MAX_PLAYER_NAME);
sSpieler[playerid][Level] = mysql_GetInt("accounts", "Level", "Name", sSpieler[playerid][Name]);
sSpieler[playerid][Adminlevel] = mysql_GetInt("accounts", "Adminlevel", "Name", sSpieler[playerid][Name]);
sSpieler[playerid][Geld] = mysql_GetInt("accounts", "Geld", "Name", sSpieler[playerid][Name]);
sSpieler[playerid][Bank] = mysql_GetInt("accounts", "Bank", "Name", sSpieler[playerid][Name]);
sSpieler[playerid][Geschlecht] = mysql_GetInt("accounts", "Geschlecht", "Name", sSpieler[playerid][Name]);
sSpieler[playerid][Wohnhaft] = mysql_GetInt("accounts", "Wohnhaft", "Name", sSpieler[playerid][Name]);
//....
Spieler[playerid][pVisum] = cache_get_field_content_int(0, "Visum", MySqlconnection); //INTEGER
Spieler[playerid][pLastx] = cache_get_field_content_float(0, "Lastx", MySqlconnection); //FLOAT
Als Beispiel