2009-05-30 59 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()); 

对于我收到错误:PHP + MySQL错误

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

任何想法?

+1

象这样的错误是更容易,如果你检查结果的SQL字符串,而不是产生该字符串的代码来解决。 – 2009-05-30 21:05:42

回答

1

啊废料的是,这里的答案:

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

-1用于回答使用SQL注入代码 – Johan 2011-12-08 11:11:42

+0

它是如何SQL注入?如果你要冷静下来,至少给我更多。编辑:我已经删除了转义,因为我使用自定义类来做到这一点。 – bear 2011-12-10 18:58:17

1

在你的字符串变量放SQL报价:

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

呀你的SQL是这样的,当是由MySQL服务器读取它:

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

如何MySQL来弄清楚什么是什么这句话?

想象一下,例如,您将$ content设置为'0 WHERE dummy = true'。然后你的SQL如下所示:

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

你是否看到了问题? SQL如何确定你的数据是什么,什么是SQL关键字?

答案是:引号!

你的SQL应该是这样的:

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

你的PHP SQL查询字符串可能看起来像这样:

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

(请注意,PHP解析双引号字符串变量,并将其替换同时注意你应该使用上面提到的功能

mysql_real_escape_string($var) 

在将数据放入MySQL之前先清理数据。这是mechler无法发布的链接:php.net/mysql-real-escape-string

干杯!

/0