【问题标题】:Syntax error in simple Insert Query [closed]简单插入查询中的语法错误[关闭]
【发布时间】:2012-12-05 21:12:45
【问题描述】:

我正在尝试在 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

kl 和 j 是我在表格中插入的最后两件事。

【问题讨论】:

  • 表名真的是itens还是items
  • 永远不要说“它给出了错误”。总是说“它给出了 this 错误”,然后粘贴实际错误。
  • 对不起,错误是:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'desc, img) VALUES (s,2012-12-18,(nome, data, cliente, link, desc, img),ww' 附近使用的正确语法在第 1 行
  • 它是 itens ,它的葡萄牙语
  • 您的变量是字符串,但您没有在每个值周围加上引号;看看我的回答。

标签: php mysql insert


【解决方案1】:

DESC 是 MySQL 保留关键字,您应该使用 backtick 对其进行转义,例如

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

您的查询很容易受到SQL Injection 的攻击,请花点时间阅读下面的文章,了解如何防止它,

【讨论】:

  • 转义所有列名是常见的做法吗?
  • @Sharlike 不,只有保留关键字必须转义。
  • 我更改了列的名称,现在它向我显示此错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“name,2012-12-25,Client,link,desc,link)”附近使用正确的语法
  • name 出现在您的表中。您能否在您的问题DESC itens 中发布声明的结果?
  • name 就是我在表格中写的
【解决方案2】:

首先 - Escape、Escape、Escape学习 PDO / mysqli 和prepared statements

第二 - 知道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);

第三 - 我认为你在表名中打错了(itensitems)。

【讨论】:

  • 嘿,杰克,mysql_real_escape_string 不能完全保护SQL InjectionSQL injection that gets around mysql_real_escape_string()
  • @JW。因此,每个转义字符串周围的引号。请正确阅读。
  • 号码呢?它会防止注射吗?我没看错。
  • @Jw 我在查询中没有看到数字。
  • 是的,但这不是重点。关键是mysql_real_escape_string 在保护您免受数字注入方面存在限制(在另一种情况下)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2018-12-31
相关资源
最近更新 更多