Vorteile per ID?

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
  • 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.

  • 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));

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 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

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • 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 :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich hab halt lieber weniger escaping bzw. Textverarbeitung.


    Geht mir genau so, wahrscheinlich uns allen :D
    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);