Ergebnis 1 bis 2 von 2

MySQL und Quotes/Zeichen in Anfragen

  1. #1 Zitieren
    Ritter Avatar von Feuerstern
    Registriert seit
    Sep 2007
    Beiträge
    1.816
    Hallo zusammen,
    ich habe schon viele verschiedene Varianten von SQL Statements in gesehen. Insbesondere in PHP Code sehe ich da die verschiedensten Varianten um Felder, Tabellen uns zu setzten.
    Beispiele einiger Varianten die ich so gesehen habe:

    Ohne jegliches "quotieren":
    Code:
    INSERT INTO news (id, title, description) VALUES (1, value1, value2)";
    Mit ` Für Tabellen und Felder und ' für Werte:
    Code:
    INSERT INTO `news` (`id`, `title`, `description`) VALUES (1, 'value1', 'value2')";
    Und davon noch die wildesten Kombinationen. Funktionieren scheinen die alle, aber was ist da best practice und kann man sich die '...' Sparen wenn man Prepare Statements benutzt?

    Viele Grüße
    Feuerstern ist offline

  2. #2 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.426
    Zitat Zitat von Feuerstern Beitrag anzeigen
    Funktionieren scheinen die alle, [...]
    Nein.

    Zitat Zitat von Feuerstern Beitrag anzeigen
    Ohne jegliches "quotieren":
    Code:
    INSERT INTO news (id, title, description) VALUES (1, value1, value2)";
    Das funktioniert so nicht ohne passende Quotes, sofern die Felder title und description Textfelder sind:
    Code:
    create table foo (id int, title text, description text);
    insert into foo (id, title, description) VALUES (1, foo, bar);
    CREATE TABLE geht durch, aber beim INSERT kommt eine Fehlermeldung:

    ERROR 1054 (42S22): Unknown column 'foo' in 'field list'

    (Getestet mit MariaDB 10.3, aber in MySQL sollte es da auch eine Fehlermeldung geben.)
    Anders wäre das, falls value1 und value2 in deinem Beispiel numerische Typen sind. Dann geht es auch ohne Anführungszeichen.

    Zitat Zitat von Feuerstern Beitrag anzeigen
    aber was ist da best practice und kann man sich die '...' Sparen wenn man Prepare Statements benutzt?
    Die Anführungszeichen für die Werte kann man sich sparen, wenn der Wert über ein Prepared Statement reinkommt. Dann kümmert sich MySQL / MariaDB automatisch um die Anführungszeichen.

    Was nun "Best Practice" ist, darüber kann man sich streiten, aber man macht nichts verkehrt, wenn man Feldnamen immer mit `...` umgibt (geht meist auch ohne) und Zeichenkettenwerte immer mit '...' umgibt (ist zwingend bei direkt im Statement stehenden Werten). Außerdem sollte man, wenn man mit dynamischen (Nutzer-)Eingaben arbeitet, immer auf Prepared Statements zurückgreifen (sicherste Variante) oder die Eingaben entsprechend maskieren, bevor sie in die SQL-Abfragen gehen, sonst kommt irgendwann Bobby Tables und löscht dir deine Daten.
    Thoronador ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •