2012-12-18 37 views
3

我想在PHP中创建一些基本的插入查询,它不断地拖出我一个错误,但我真的不知道为什么,请问你们有没有什么不对?在简单插入查询中的语法错误

mysql_query(" 
INSERT INTO itens (nome, data, cliente, link, desc, img) VALUES ($nome,$data,$cliente,$link,$desc,$img) 
") or die(mysql_error()); 

更新

从OP的删除答案拉出时,代码现在:

mysql_query("INSERT INTO itens (nome, data, cliente, link, `desc`, img) 
VALUES ($nome,$data,$cliente,$link,$desc,$img)") or die(mysql_error()); 

和错误是:

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 'kl,j)' at line 2 

吉隆坡和j是我在表格中插入的最后两件事情。

+0

表名是真的'itens'还是'items'? – Havelock

+5

永不说“它给出了一个错误”。总是说“它给*这个*错误”,然后粘贴实际的错误。 –

+0

抱歉,错误是:您的SQL语法有错误;检查对应于您的MySQL服务器版本的手册,以在'desc,img'附近使用正确的语法VALUES(s,2012-12-18,(nome,data,cliente,link,desc,img),http:// ww'在第1行 – SaraVieira

回答

7

DESC是MySQL中保留关键字,您应该backtick逃脱它,当然

INSERT INTO itens (nome, data, cliente, link, `desc`, img) 
VALUES ($nome,$data,$cliente,$link,$desc,$img) 

你查询与SQL Injection脆弱的,请花时间阅读文章如何防止它,

+0

逃避所有列名是否是常见做法? – Sharlike

+0

@Sharlike nope,只有那些保留关键字的人才必须转义。 –

+0

我改变了列的名称,现在它显示我这个错误: 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,在第1行的'name,2012-12-25,Client,link,desc,link'附近使用正确的语法'' – SaraVieira

2

首先 - 逃生,逃生,逃生了解PDO /库MySQLi,准备发言

第二 - 知道reserved keywords是不能用于列名的;那些必须使用反引号逃脱。

$sql = sprintf("INSERT INTO itens (nome, data, cliente, link, `desc`, img) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');", 
    mysql_real_escape_string($nome), 
    mysql_real_escape_string($data), 
    mysql_real_escape_string($cliente), 
    mysql_real_escape_string($link), 
    mysql_real_escape_string($desc), 
    mysql_real_escape_string($img) 
); 

mysql_query($sql); 

三 - 我想你的表名(itens VS items)做了一个错字。

+1

hey jack的形式,'mysql_real_escape_string'没有完全保护'SQL Injection'。 [SQL注入绕过mysql_real_escape_string()](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string/5741264#5741264) –

+0

@JW。因此围绕每个转义字符串的引号。请正确阅读。 –

+0

数字怎么样?它会防止注射。我正确阅读。 –