2009-05-30 12 views
-1
if ($_POST) {$content = stripslashes($_POST['content']); 
    $by = $_SESSION['exp_user']['username']; 
    $dt = date("F j, Y, g:i a"); 
    mysql_query("UPDATE tbl_intmsg SET time = ".$dt.", by = ".$by." AND content = ".$content."") or die(mysql_error()); 

Für welche ich Fehler empfangen:PHP + MySQL Fehler

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 '26, 2009, 2:28 pm, by = shamil.nunhuck AND content = Test message! ' at line 1

Irgendwelche Ideen?

+1

Fehler wie diese sind leichter zu beheben, wenn Sie die resultierende SQL-Zeichenfolge zu untersuchen, nicht der Code, der diese Zeichenfolge erzeugt. –

Antwort

1

Ah Schrott aus, hier ist die Antwort:

$db = mysql_query("UPDATE `tbl_intmsg` SET `time` = '".$dt."', `by` = '".$by."', `content` = '".$content."'"); 
+0

-1 für die Beantwortung mit SQL-injizierbaren Code – Johan

+0

Wie ist es SQL-injizierbar? Wenn du runtersammeln willst, gib mir wenigstens mehr. EDIT: Ich habe die Flucht entfernt, weil ich eine benutzerdefinierte Klasse verwende, um es zu tun. – bear

+0

'$ content' kommt von' $ _POST ['content'] 'ohne zu entkommen, benutzerdefinierte Klassen für das Escaping sind ein Rezept für ein Desaster. Verwenden Sie 'mysql_real_escape_string()' und sonst nichts. – Johan

1

put SQL Anführungszeichen um Ihre String-Variablen:

UPDATE tbl_intmsg SET time = \"".$dt."\", by = \"".$by."\" AND content = \"".$content."\" 
3

Ja Ihre SQL sieht wie folgt aus, wenn es vom MySQL-Server gelesen wird:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = Test message! 

Wie wird MySQL, was in dieser Aussage, was ist, um herauszufinden?

Stellen Sie sich zum Beispiel vor, dass Sie Ihren $ Inhalt auf '0 WHERE dummy = true' setzen. Dann würde Ihr SQL wie folgt aussehen:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = 0 WHERE dummy = true 

Sehen Sie das Problem? Wie kann SQL herausfinden, was Ihre Daten sind und was sind SQL-Schlüsselwörter?

Die Antwort ist: Zitate!

Ihre SQL sollte wie folgt aussehen:

UPDATE tbl_intmsg SET time = '26, 2009, 2:28 pm', by = 'shamil.nunhuck' 
    AND content = 'Test message!' 

Ihre PHP SQL-Query-String könnte wie folgt aussehen:

$q="UPDATE tbl_intmsg SET time = '$dt', by = '$by' AND content = '$content'"; 

(Beachten Sie, dass PHP doppelte Anführungszeichen Zeichenfolgen für Variablen analysiert und ersetzt sie Beachten Sie auch, dass Sie die oben genannte Funktion

mysql_real_escape_string($var) 

verwenden sollten um Ihre Daten zu bereinigen, bevor Sie sie in MySQL einfügen. Hier ist der Link, den Mechler nicht posten konnte: php.net/mysql-real-escape-string)

Prost!

/0