Patrick D.: mysql insert

Hallo mal wieder,

habe eine mysql query mit INSERT, die ich gerne ausführen würde. Diese habe ich mit Testdaten ausgefüllt.

$test = "INSERT INTO table (name,city,street,lat,long) VALUES ('$Name','$City','$Street','$Lat','$Long')";

$test habe ich mir mal ausgeben lassen mit:

INSERT INTO table (name,city,street,lat,long) VALUES ('Hokuspokus','Hannover','Baggerweg 999','52.37206','9.735686')

(wie gesagt Testdaten).

Jetzt meckert er mir die ganze Zeit rum mit: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long) VALUES ('Hokuspokus','Hannover','Baggerweg 999','52.37206','9.735686')' at line 1 <br />

Wieso? Ich habe:

a) real_escape_string() benutzt, um alle potentiell gefährlichen Zeichen zu escapen
b) mit var_dump() alle Einzelteile mal ausgegeben. Name,City,Street waren alle String und lat und long beides float werte, wie gewollt

Woran liegt das bitte?

  1. Hi,

    habe eine mysql query mit INSERT, die ich gerne ausführen würde. Diese habe ich mit Testdaten ausgefüllt.

    $test = "INSERT INTO table (name,city,street,lat,long) VALUES ('$Name','$City','$Street','$Lat','$Long')";

    $test habe ich mir mal ausgeben lassen mit:

    INSERT INTO table (name,city,street,lat,long) VALUES ('Hokuspokus','Hannover','Baggerweg 999','52.37206','9.735686')

    warum setzt du Fließkommazahlen in einfache Anführungszeichen?

    1. warum setzt du Fließkommazahlen in einfache Anführungszeichen?

      Weil ich aus Gewohnheit alle Variablen in einer Query in Anführungszeichen setze.

      Liegt es vllt. daran, dass die Spalten lat und long in meiner Tabelle beide vom Typ varchar(8) sind und $Lat und $Long, die ich einfügen möchte (float) haben, was ich mir ja mit var_dump() habe bestätigen lassen?

      1. Tach!

        warum setzt du Fließkommazahlen in einfache Anführungszeichen?
        Weil ich aus Gewohnheit alle Variablen in einer Query in Anführungszeichen setze.

        Gewohnheit ist nicht immer der beste Ratgeber. Da du den Statement-String selbst zusammenbaust (satt Prepared Statement zu verwenden), erzeugst du am Ende einen großen String. Es ist nicht weiter erheblich, ob da drin eine Zahl ziffernzeichenweise oder ziffernzeichenweise mit Anführungszeichen notiert ist. In beiden Fällen müssen diese Ziffern-Zeichen erkannt werden und daraus wieder der eigentliche Zahlenwert erzeugt werden.

        Liegt es vllt. daran, dass die Spalten lat und long in meiner Tabelle beide vom Typ varchar(8) sind und $Lat und $Long, die ich einfügen möchte (float) haben, was ich mir ja mit var_dump() habe bestätigen lassen?

        In deinem Fall ist das jedoch belanglos, da für die Varchar-Felder das übergebene String-Literal (sprich die als String notierte Zahl) nicht weiter umgewandelt werden muss. - Ansonsten, siehe Kontextwechsel - Zahlen im (My)SQL-Statement. (Dein eigentliches Problem wurde ja schon von Matti geklärt.)

        dedlfix.

      2. warum setzt du Fließkommazahlen in einfache Anführungszeichen?
        Weil ich aus Gewohnheit alle Variablen in einer Query in Anführungszeichen setze.

        Dann mach das das doch künftig mit Datenbank-, Tabellen- und Spaltennamen so ähnlich. (Nimm halt die Backticks)

        :-)

        Jörg Reinholz

      3. Gewohnheiten sind nicht immer sinnvoll. Ich mach das extra nicht so, damit ich sehe was ein String ist und was nicht.

  2. Hi,

    INSERT INTO table (name,city,street,lat,long) VALUES ('Hokuspokus','Hannover','Baggerweg 999','52.37206','9.735686')

    (wie gesagt Testdaten).

    Jetzt meckert er mir die ganze Zeit rum mit: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long) VALUES ('Hokuspokus','Hannover','Baggerweg 999','52.37206','9.735686')' at line 1 <br />

    long ist ein geschütztes Wort. Du musst es in Anführungsstriche setzen (mit `).

    Bis die Tage,
    Matti

    1. long ist ein geschütztes Wort. Du musst es in Anführungsstriche setzen (mit `).

      Vielen Dank das war der Fehler!