2011-08-25 149 views
1

我不能为我的生活找出为什么这是行不通的。每当它抛出了一个错误:不添加到数据库

$GROUPCREATE = $_POST['GROUPCREATE']; 
$USER = $_POST['USER']; 
mysql_connect ("localhost", "XXXX", "XXXX") or die ('Error: ' . mysql_error()); 
mysql_select_db ("XXXX"); 
$query="INSERT INTO contacts_groups (id, GROUP, USER)VALUES ('NULL','".$GROUPCREATE."','".$USER."')"; 
mysql_query($query) or die ('Error updating database' . mysql_error()); 
header('Location: add_done.php') ; 

我得到以下错误: 您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,在第一行使用'GROUP','USER'VALUES('NULL','组名'出来!代码看起来没问题,并且与我在另一个(完全工作)表单上使用的代码非常相似。

回答

3

GROUP是mysql中的保留字。你将不得不“逃离”它反引号:

INSERT INTO contacts_groups (id, `GROUP`, USER) ... 

你的代码也容易受到SQL注入,所以最好采取照顾。

+0

+1提到的安全问题。 – JJJ

1

因为GROUP是MySQL中的保留字(GROUP BY)。你应该改变你的领域加引号的名字就像``。

1

GROUP得到它们的列表是一个MySQL保留关键字,所以它是打破你的查询。你需要逃避它带回蜱像这样:

`GROUP` 

MySQL Reserved Words手册页。

所以,你的代码应该是这样的:

$query="INSERT INTO `contacts_groups` (`id`, `GROUP`, `USER`) 
     VALUES ('NULL','$GROUPCREATE','$USER')"; 

您还会注意到我已经删除了你在查询了不必要的字符串连接。

您应该小心将您的SQL查询放入什么位置,以防止发生SQL注入。作为最低限度你应该运行您的查询之前如下:

$GROUPCREATE = mysql_real_escape_string($GROUPCREATE); 

上的所有PHP变量,你要拖放到您的查询。

理想情况下,您将使用PHPs PDO classes并使用占位符,以便您的数据/变量自动转义。