Php 奇怪的SQL语法错误
有了密码Php 奇怪的SQL语法错误,php,mysql,sql,Php,Mysql,Sql,有了密码 mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')") 我得到一个SQL语法错误。这是什么原因?我看不出语法有什么问题。DATE在SQL中是一个保留字,所以我推测当您将它用作列名时,它会触发语法错误,因为MySQL试图将它解析为列名以外的内容 使用反勾号转义标识符: mysql_query("INSERT INTO `Messages
mysql_query("INSERT INTO Messages (Message, toUser, From, Date) VALUES ('$mes','$to','$from','$date')")
我得到一个SQL语法错误。这是什么原因?我看不出语法有什么问题。
DATE
在SQL中是一个保留字,所以我推测当您将它用作列名时,它会触发语法错误,因为MySQL试图将它解析为列名以外的内容
使用反勾号转义标识符:
mysql_query("INSERT INTO `Messages` (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')")
或者更好,看看是否可以将列重命名为不需要转义的其他列。进行查询,如:
//use mysql_real_escape_string for variables
mysql_query("INSERT INTO Messages (`Message`, `toUser`, `From`, `Date`) VALUES ('$mes','$to','$from','$date')")
变量中可能有一个字符需要转义。使用
mysql\u real\u escape\u string
如下所述:我猜有人在其中一个变量中放入了一个'
,从而生成如下查询
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')");
错误说明了什么?可能取决于PHP插值。向我们展示实际的MySQL查询:将问题分解为其最小的组成部分是调试的一个关键因素。另外,一个重要的因素是:看一看。通常,当您在这样一个简单的一行代码中遇到错误时,具体的错误没有说比“语法错误”更有价值。@Raidohh:它确实告诉你它在那一行的确切位置,这是最重要的一点。+1:最好划清界限!至少要让它保持一致。@Tomalak Geret'kal:Heh,当然-修复:)
Date
可能是一个SQL关键字,但我从来没有遇到过在字段列表的backticks中没有它的问题。backticks工作得很好。谢谢