奇怪的SQL语法错误

时间:2011-12-28 16:18:47

标签: php mysql sql

使用代码

mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')")

我收到了SQL语法错误。这是什么原因?我认为语法没有错。

4 个答案:

答案 0 :(得分:5)

DATE是SQL中的保留字,因此我认为当您将其用作列名时会触发语法错误,因为MySQL会尝试将其解析为列名以外的其他内容。

使用反引号转义标识符:

mysql_query("INSERT INTO `Messages` (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')")

或者更好的是,看看您是否可以将列重命名为其他不需要转义的内容。

答案 1 :(得分:1)

我的猜测是有人在其中一个变量中添加',从而进行类似

的查询
INSERT INTO Messages (Message, toUser, From, Date) VALUES ('Test','Joe O'Neil','Jack Smith','2011-12-20')

由于'中的"O'Neil",这是语法错误。在SQL中使用变量之前,需要转义变量。

$mes = mysql_real_escape_string($mes);
$to = mysql_real_escape_string($to);
$from = mysql_real_escape_string($from);
$date = mysql_real_escape_string($date);
mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')");

答案 2 :(得分:0)

进行查询,例如:

//use mysql_real_escape_string for variables
mysql_query("INSERT INTO Messages (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')")

答案 3 :(得分:0)

变量中可能存在需要转义的字符。按照此处所述使用mysql_real_escape_stringhttp://php.net/manual/en/function.mysql-real-escape-string.php