Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 奇怪的SQL语法错误_Php_Mysql_Sql - Fatal编程技术网

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工作得很好。谢谢