kostenloser Webspace werbefrei: lima-city


MySQL Query falsch

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    philippkern

    Kostenloser Webspace von philippkern

    philippkern hat kostenlosen Webspace.

    Hallo,
    habe ein Problem bei meinem PHP-Script, bzw. an einem MySQL-Query.

    $sql = \"INSERT INTO linktausch(
                                    sitename, 
                                    sitedescription, 
                                    siteurl, 
                                    bannerurl, 
                                    linkername, 
                                    linkeremail, 
                                    date, 
                                    ip, 
                                    show
                            ) 
                            VALUES(
                                    \'\".$_POST[\'sitename\'].\"\',
                                    \'\".$_POST[\'sitedescription\'].\"\', 
                                    \'\".$_POST[\'siteurl\'].\"\', 
                                    \'\".$_POST[\'bannerurl\'].\"\', 
                                    \'\".$_POST[\'linkername\'].\"\', 
                                    \'\".$_POST[\'linkeremail\'].\"\', 
                                    \'\".date(\"r\").\"\', 
                                    \'\".$_SERVER[\'REMOTE_ADDR\'].\"\', 
                                    \'0\'
                            )\";
                            
            mysql_query($sql) OR
                    die(\"Error: \". mysql_error());


    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 \'show) VALUES( \'\', \'\', \'http://\', \'http://\', \'\',\' at line 2


    Kann mir jemand sagen was daran nicht stimmt?
    Die POST-Variablen werden alle übergeben, zum Großteil aber leer, doch das dürfte ja nichts machen, oder?

    PS.: Ich weiß da fehlen noch einige Überprüfungen, ...

    Edit: Wenn ich $sql ausgebe kommt folgendes:
    INSERT INTO linktausch( 
    sitename, 
    sitedescription, 
    siteurl, 
    bannerurl, 
    linkername, 
    linkeremail, 
    date, 
    ip, 
    show ) 
    VALUES( \'\', \'\', \'http://\', \'http://\', \'\', \'\', \'Tue, 06 May 2008 20:28:31 +0200\', \'127.0.0.1\', \'0\' )




    Beitrag geändert: 6.5.2008 20:28:47 von philippkern


    EDIT2: Hat sich erledigt.
    show ist ein spezielles Keyword von MySQL, thx.


    Beitrag geändert: 6.5.2008 20:39:10 von philippkern
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    Ich gehe mal davon aus das dein DateFeld ein DateTime Typ ist und entsprechend ist im Query dein Date auch falsch.
  4. Autor dieses Themas

    philippkern

    Kostenloser Webspace von philippkern

    philippkern hat kostenlosen Webspace.


    Ich gehe mal davon aus das dein DateFeld ein DateTime Typ ist und entsprechend ist im Query dein Date auch falsch.


    Nein.

    `date` VARCHAR(40) NOT NULL ,;)
  5. Prüf mal dringend noch deine POST-Variablen per mysql_real_escape_string bevor du sie in den String einbaust. Sonst kann man sehr leicht an deiner Datenbank viel Schaden anrichten und auch alle Einträge lesen.
  6. Autor dieses Themas

    philippkern

    Kostenloser Webspace von philippkern

    philippkern hat kostenlosen Webspace.


    Prüf mal dringend noch deine POST-Variablen per mysql_real_escape_string bevor du sie in den String einbaust. Sonst kann man sehr leicht an deiner Datenbank viel Schaden anrichten und auch alle Einträge lesen.

    Ich weiß das da noch einige Überprüfungen fehlen, aber wenn ich $sql vorher mit mysql_real_escape_string bearbeite dann funkiert es wegen meinen Einrückungen im Query nicht.
    Warum, das müsste doch egal sein?

    Edit: OK, ich seh schon, jetzt muss ich sprintf() verwenden :slant:

    Beitrag geändert: 7.5.2008 8:50:15 von philippkern
  7. e********l

    Die Einrückungen sollten keinerlei Probleme machen. In den Queries die ich im Job an den Server schicke - häufig über PHP generiert - sind noch viel mehr Einrückungen und trotz mysql_real_escape funktioniert es.

    Trotzdem komisch das der Query nicht funktioniert.
  8. Autor dieses Themas

    philippkern

    Kostenloser Webspace von philippkern

    philippkern hat kostenlosen Webspace.

    Hier mal die wichtigsten Scriptteile bezüglich des mysql_real_escape_string:
    $sql = \"SELECT 
    			sitename, sitedescription, siteurl, bannerurl 
    		FROM 
    			linktausch 
    		WHERE
    			showsite = \'1\'
    		ORDER BY 
    			id 
    		ASC\";
    $result = mysql_query(mysql_real_escape_string($sql)) OR 
    	die(\"Error: \".mysql_error());

    Das gibt folgenden Error aus:
    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 \'\\r\\n sitename, sitedescription, siteurl, bannerurl \\r\\n FROM \\r\\n linktausc\' at line 1

    Was stimmt daran nicht?
  9. e********l

    mysql_real_escape wendet man nur auf die jeweiligen dynamischen Werte an. Wie zb. die übergebene ID. Aber niemals über den gesamten Query!
  10. Ich weiß nicht, ob das relevant ist, aber vll könntest du den ganzen Query in eine Zeile schreiben und die Tabellennamen und Spalten namen in ` und ` tun.

    Also:
    $sql = \"SELECT `sitename`, `sitedescription`, `siteurl`, `bannerurl` FROM `linktausch` WHERE `showsite` = \'1\' ORDER BY `id` ASC\";

    Ryan
  11. Autor dieses Themas

    philippkern

    Kostenloser Webspace von philippkern

    philippkern hat kostenlosen Webspace.


    mysql_real_escape wendet man nur auf die jeweiligen dynamischen Werte an. Wie zb. die übergebene ID. Aber niemals über den gesamten Query!


    Vielen Dank, hab nicht so genau geschaut auf was das gehört. thx :thumb:

    ryanblack schrieb:
    Ich weiß nicht, ob das relevant ist, aber vll könntest du den ganzen Query in eine Zeile schreiben und die Tabellennamen und Spalten namen in ` und ` tun.

    Also:
    $sql = \\\'SELECT `sitename`, `sitedescription`, `siteurl`, `bannerurl` FROM `linktausch` WHERE `showsite` = \\\'1\\\' ORDER BY `id` ASC\\\';

    Ryan

    Ja, aber dann würden noch die \' \' stören.
    Aber das mit mysql_real_escape_string war eh nich richtig, so wie ich es verwendet hab. ;)
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!