Beiträge von Campbell

    Jetzt könnte man noch daran appelieren, dass du jeweils das Semikolon vergessen hast bei den einzelnen Beispielen , welche auch seine ordnung hat und zwar signalisiert dies MySQL das das Query
    fertig ist und nachfolgende Befehl werden nicht mehr ausgeführt.


    Gute Anmerkung! Habe extra eine Passage zum Semikolon hinzugefügt und die Queries um je ein Semikolon erweitert.

    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:

    SQL
    SELECT alter FROM table WHERE show = 3;


    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:


    SQL
    SELECT `alter` FROM `table` WHERE `show` = 3;



    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:


    SQL
    INSERT INTO `table` (`field1`, `field2`) VALUES (2, Markus ist ein neues Mitglied);



    Ein Beispiel, das String-Begrenzer falsch anwendet:


    SQL
    INSERT INTO `table` (`field1`, `field2`) VALUES ('2', 'Markus ist ein neues Mitglied');


    Ein Beispiel, das String-Begrenzer konsequent und richtig anwendet:


    SQL
    INSERT INTO `table` (`field1`, `field2`) VALUES (2, 'Markus ist ein neues Mitglied');



    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:


    SQL
    SELECT `field1` FROM `table`


    SQL
    SELECT `field1` FROM `table`;



    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:


    SQL
    select `name` from `table` where `age` = 3;


    SQL
    SELECT `name` FROM `table` WHERE `age` = 3;



    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:


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

    Oftmals wird vorgeschlagen, ein Backup von der Datenbank in C:/xampp/mysql/data zu machen und den Ordner anschließend zu löschen. Es sind aber auch andere Ursachen möglich, die nicht mit der Entfernung dieses Ordners gelöst werden.

    Die tausende Opfer des Taifuns kannten wir nicht. Natürlich ist das eine Katastrophe und wir denken daran. Paul Walker kannten wir aber als lustige, charmante und wohltätige Person. Menschen fühlen sich eben hingezogen zu Personen, die sie kennen.

    Ich füge mal hinzu, dass ich das UCP nur verkaufe, wenn mich das Angebot interessiert. Angebote von 1€, 10€ etc. sind daher nicht interessant. Ich muss das UCP nicht verkaufen, ich habe lediglich das Interesse, damit etwas Geld für etwas anderes zu verdienen. Hinter dem Design und der anschließenden Umsetzung stehen mehrere Stunden Arbeit. Also bitte seriös im Sinne von Arbeitsstunden denken.

    Da sich meine Community Stück für Stück auflöste, möchte ich nun mein User Control Panel verkaufen, welches ich begonnen hatte. Dabei verkaufe ich das Design (Photoshop Datei) sammt Code für das Design (Javascript + CSS). Es sind bereits ein paar Unterseiten enthalten, aber es sind auch Absprachen möglich. Damit will ich sagen, dass ich gerne für euch unter Bezahlung das User Control Panel weiterentwickel und fertigstelle.


    Ein Link als Preview: http://ucp.insomnia-roleplay.com


    Angebote bitte per PN an mich. Der Höchstbietende erhält den Quellcode + Design und das Angebot von mir, das User Control Panel gegen Bezahlung weiterzuentwickeln. Bisher möchte ich das User Control Panel als Gesamtpaket verkaufen, also nicht mehrere Versionen davon verkaufen.


    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    Wenn du beim "pingen" eine Zeitüberschreitung als Rückgabe erhälst, dann kannst du den Server nicht erreichen. Dann hat dies etwas mit deinem Netzwerk, deinem PC oder dem Server und dessen Netzwerk zu tun, aber nichts mit SA:MP.

    I.d.R. ist jeder Server in der Lage, ein Datenbankmanagementsystem laufen zu lassen. Warum sollte es da etwas spezielles geben? Was ist dein Ziel?