Huhu,
ich hätte eine Frage. Wo liegen die Vorteile wenn ich den Spieler per ID in der Datenbank auslese, anstatt per Namen?
MfG,
Cheevy
Huhu,
ich hätte eine Frage. Wo liegen die Vorteile wenn ich den Spieler per ID in der Datenbank auslese, anstatt per Namen?
MfG,
Cheevy
Es wird minimal schneller sein, da Zahlen schneller verglichen sind als Strings.
Ansonsten macht es keinen Unterschied.
Also reicht es, wenn ich so anfange?
enum SpielerDaten
{
pID,
pEingeloggt
}
new SpielerInfo[MAX_PLAYERS][SpielerDaten];
Den Grund warum ich id nehme ist einfach, denn wenn ich den Namen änder muss ich den nur in einer Tabelle ändern und nicht immer da wo ich den nutze
Wenn du es über IDs machen willst, ja.
Zum Punkt von Beavis:
Genau, deshalb nimmt man eigentlich für alles IDs als Primary Key. Außerdem ist ein Primary Key dafür da, dass man ihn nicht ändert. Eine ID musst du nicht ändern, den Name vielleicht schon irgendwann mal.
Die Empfehlung ist natürlich IDs zu verwenden, aber in der Abfrage macht es keinen Unterschied.
Aufgrund dessen, dass ich das erste mal mit ID's arbeite.
Würde das so funktionieren?
new query[128];
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE `ID` = '%d'",SpielerInfo[playerid][pID]);
mysql_tquery(MySQL,query,"LoginRegisterQuery","siii",query,_SQL_ACCOUNTCHECK,playerid,MySQL);
Nein, beim Login musst du nach Name selektieren, da du ja nicht weißt welche ID zu dem Name gehört (außer du selektierst das zuvor extra, aber das macht keinen Sinn).
Erst beim Auslesen des Caches lädst du die ID und kannst ab dann mit der ID arbeiten.
Hast du zufällig ein Beispiel, kann dir gerade nicht folgen..
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE `name` = '%e'",SpielerName(playerid));
oder, falls nach Großbuchstaben unterschieden werden soll:
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE BINARY `name` = '%e'",SpielerName(playerid));
Ja, dann frage ich im Endeffekt aber den Namen ab.
Wie soll ich dann bitte auf die ID gehen?
In LoginRegisterQuery lädst du ja die Daten aus dem Cache (Geld, ...). Dort lädst du auch die ID.
Sprich, du greifst nur beim Login über den Namen auf den Datensatz zu, bei allem anderem über die ID.
Also wäre es so richtig und die ID ist im Login/Registrierung nur Nebensache, die dort keine Funktion aufweist.
enum SpielerDaten
{
pName[MAX_PLAYER_NAME],
pAccountID,
pEingeloggt
}
new SpielerInfo[MAX_PLAYERS][SpielerDaten];
new query[128];
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE `Name` = '%s'",GetName(playerid));
mysql_tquery(MySQL,query,"LoginRegisterQuery","siii",query,_SQL_ACCOUNTCHECK,playerid,MySQL);
Ansonsten macht es keinen Unterschied.
Nunja, du hast auch weniger Probleme mit einer SQL Injection ;D
Jaja, die Anzahl an Injections via Namen wird äußerst Gering sein - trotzdem, man weiß nie wie die Scripter mit ihren Sachen umgehen.
mMn ist auch ein großer Vorteil, das man weniger Verwaltungs Aufwand Script intern hat
Nunja, du hast auch weniger Probleme mit einer SQL Injection ;D
Du kannst den String ja escapen. Daran sollte es nicht scheitern.
Cheevy.Shakur: Ja. Wenn du den Escape noch einbaust, sieht es so aus:
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE `Name` = '%e'",GetName(playerid));
%e in mysql_format = escaped string, geht nur in mysql_format, nicht in format.
Du kannst den String ja escapen. Daran sollte es nicht scheitern.
Ist ohnehin Geschmackssache wie man es macht. Ich hab halt lieber weniger escaping bzw. Textverarbeitung.
Liegt aber vielleicht auch daran wie die Strings in Pawn implementiert sind
Ich hab halt lieber weniger escaping bzw. Textverarbeitung.
Geht mir genau so, wahrscheinlich uns allen
Mit Strings zu arbeiten ist in keiner Sprache wirklich toll, wenn man IDs als Alternative hat.
Nur, beim Login geht es eben nicht anders, man muss irgendwie vom Name auf die ID schließen.
Cheevy.Shakur:
Zum Login kannst, bzw. musst du es dann mit Name und Passwort abfragen:
mysql_format(MySQL,query,sizeof(query),"SELECT * FROM `"#SERVERTAG"_accounts` WHERE `Name` = '%e' AND `password` = '%e'",GetName(playerid), inputtext);