2011-10-14 62 views
0

我有以下代码:奇怪的SQL错误

<!--ajouter une carte  --> 
<?php 
if($_POST["submit_dd"]){ 

    mysql_query("INSERT INTO data SET desc='".$_POST["carte_nom"]."' ") or die(mysql_error()); 



} 
?> 

<b>Ajouter une carte:</b><br> 
<form method="post"> 
<table> 
<tr><td>nom</td><td><textarea name="carte_nom"/></textarea></td></tr> 
<tr><td></td><td><input type="submit" name="submit_dd" value="Ajouter"/></td></tr> 
</table> 
</form> 

我从这个非常简单的查询得到一个错误:

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 'desc='dsfgsdfds'' at line 1 

数据库是很简单的:ID(小学,自动递增),递减(文本)

问候

+4

*等待有关SQL注入的意见* – animuson

+1

嗯......看起来你可能有一个SQL注入问题;) – Jakub

+0

尝试使用预准备语句和占位符。 http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html – Cliff

回答

4

我可能错了,但由于desc是一个sql关键字,因此您可能会收到错误。尝试包裹它在后面蜱`desc`

0
mysql_query("INSERT INTO data (desc) VALUES('".$_POST["carte_nom"].")' ") 
+3

go go * sql注入* ... – Jakub

+0

是的,我只是编辑我的答案,建议占位符和准备好的陈述,但我只会发表评论。 – Cliff

1

desc是一个保留关键字。使用"desc"代替

0

Check the list of reserved keywords.“DESC”就是其中之一。

以下是有效的MySQL中:

INSERT INTO data SET `desc` = 'post data'; 

你应该重新考虑,虽然你的脚本。具有与保留关键字相同的字段是一个不好的迹象。正如在使用$ _POST数据之前缺乏卫生设备一样。

这也是为什么desc是一个丑陋的字段名:

SELECT id, desc 
FROM data 
ORDER BY id desc; #this is valid sql, but likely isn't going to do what you expect 

看起来非常像

SELECT id, desc 
FROM data 
ORDER BY id, desc; #not valid sql 

而且强制性注射阅读:How does the SQL injection from the "Bobby Tables" XKCD comic work?