Da mir in letzter Zeit oftmals aufgefallen ist, dass den meisten Mitgliedern hier im Forum dir richtige Schreibweise für MySQL Queries entweder nicht bekannt ist oder egal ist, möchte ich im Folgenden die richtige Schreibweise und ihre Gründe dafür aufzeigen. Diese Schreibweise gilt nicht nur für Pawno, sondern für jeden Anwendungszweck von MySQL, denn MySQL ist MySQL und ändert sich von Sprache zu Sprache nicht. Die falsche Schreibweise von MySQL Queries führt oftmals Probleme herbei und öffnet auch gelegentlich Sicherheitslücken für potentielle Angreifer. Daher ist bei der Schreibweise von MySQL Queries besonders Acht zu geben. In diesem Tutorial wird davon ausgegangen, dass MySQL bereits ein Begriff ist und der Verwendungszweck und die grundlegende Schreibweise von solchen Queries bekannt ist. Für Neueinsteiger in das Thema MySQL ist dieses Tutorial nicht geeignet und es wird empfohlen, dieses Thema nachzuschlagen, da es in der heutigen Welt der Programmierung ein großes Thema stellt, einen weites Anwendungsfeld hat und vor allem für ein Einstieg in das Thema Database Management System (DBMS) sehr gut geeignet ist. Schießen wir los ...
Inhaltsverzeichnis
- Backticks
- String-Begrenzer
- Semikolon
- Groß-/Kleinschreibung
- Mehrzeilige Schreibweise
- Fazit
Backticks
Backticks sind zwar umstritten, sind aber im Endeffekt eine Absicherung. Ein Backtick (`) wird verwendet, um von MySQL-Keywords zu unterscheiden. Es kann demnach sein, dass wenn man bekannte Keywords aus MySQL Queries als zum Beispiel Tabellennamen, Feldnamen usw. verwendet, dass es bei der Ausführung des Queries zu einem Syntaxfehler kommt. Kurzes Beispiel:
Es würde ein Syntaxfehler generiert werden, da 'show', 'alter' und evt. 'table' Keywords von MySQL sind und demnach falsch interpretiert werden würden. Abhilfe leisten Backticks, womit man den Tabellen- bzw. Feldnamen einschließt und eine Absicherung erhält. Ein richtiges Beispiel wäre:
String-Begrenzer
Zwar ist mir aufgefallen, dass viele bereits String-Begrenzer (') verwenden, jedoch meist falsch. String-Begrenzer begrenzen, wie der Name bereits sagt, Strings. Als oftmaliger Fehler ist mir aufgefallen, dass Leute Integer, Floats, ... mit String-Begrenzern verpacken. Strings werden mit String-Begrenzern eingeschlossen, um eine Zeichenkette als Element darzustellen. Dabei werden die Rahmenbedingungen für das erfolgreiche Einfügen von Strings in einen Query hergestellt. Dies hat nichts mit dem vorigen Escapen des Strings zur weiteren Vorbeugung gegen SQL Injections zu tun. Auf dieses Thema wird in diesem Tutorial nicht weiter eigegangen, es wird aber tunlichst empfohlen, dieses Thema zu bearbeiten um weitere Sicherheitslücken zu schließen. Ein Beispiel, welches zu einem Syntaxfehler führt:
Ein Beispiel, das String-Begrenzer falsch anwendet:
Ein Beispiel, das String-Begrenzer konsequent und richtig anwendet:
Semikolon
Zwar spielt das Semikolon am Ende eines Querys meist eine optionale Rolle, doch prägt es guten coding Stil. In den meisten Sprachen wie Pawno, PHP usw. ist das Semikolon optional, da der auszuführende Query bereits durch bspw. Hochkommata begrenzt ist. Trotzdem ist eine optionale Maßnahme oftmals hilfreich. Als weiteres Beispiel sind MySQL Queries anzusprechen, die auf DOS Ebene ausgeführt werden. Diese benötigen ein Semikolon explizit, dass das Ende des Querys erkannt und der Query selbst ausgeführt werden kann. Wieder ein Negativ- und Positivbeispiel:
Groß-/Kleinschreibung
Die Verwendung der richtigen Zeichen an richtigen Orten zum richtigen Zweck sei demnach geklärt. Treten wir über zur Formatierung des kompletten Queries. Hierbei fällt mir oftmals auf, dass die Groß- und Kleinschreibung oftmals nicht eingehalten wird und zu Problemen führen kann. Die Groß- und Kleinschreibung spielt bei Windows und Mac keine Rolle, jedoch bei UNIX Systemen. Es wird also empfohlen, 'case sensitivity' zu beachten und zu befolgen, denn vor allem hier bei SA:MP ist ein Distributionswechsel nach zum Beispiel Linux nicht undenkbar. Man beachte also schon von Beginn an die Groß- und Kleinschreibung der Queries, um späteren Problemen vorzubeugen. Weiterhin fördert die Groß- und Kleinschreibung die Leserlichkeit der Queries. Es ist anzumerken, dass bei Tabellen- und Feldnamen die Groß- und Kleinschreibung keine Rolle spielt, aber bei UNIX Systemen die Groß- und Kleinschreibung von Keywords und bei allen Distributionen die Groß- und Kleinschreibung bei Suchvorgängen (Ausnahmen bei bestimmten Tabelleneinstellungen). Ein Negativbeispiel mit anschließendem Positivbeispiel folgt:
Mehrzeilige Schreibweise
Die mehrzeilige Schreibweise von Queries ist vor allem bei langen Queries zur Förderung der Leserlichkeit zu empfehlen, jedoch macht es beim Syntax keinen Unterschied und ist daher lediglich empfohlen. Bei der mehrzeiligen Schreibweise in Pawno ist die Verwendung von Backslashes vorteilhaft, um das wiederholende Aufrufen einer Funktion zu verhindern. Ein Beispiel:
SELECT `field1`, `field2`, `field3`\
FROM `table`\
WHERE `field1` = 1 AND `field2` = 3\
LIMIT 20;
Fazit
Abschließend lässt sich also feststellen, dass eine ordentliche Schreibweise von Queries nicht nur die Leserlichkeit verbessert, sondern auch Syntaxfehlern und möglichen Sicherheitslücken vorbeugt. Es wird also empfohlen, auch für die spätere Weiterverwendung des Programmierten, die richtige Schreibweise von Queries anzuwenden und tunlichst zu befolgen. Anmerkungen und Anregungen zur Verbesserung des Tutorials sind willkommen, aber auch Feedbacks und Fragen über dieses Thema.