【问题标题】:SQL Query not working - No reason? [duplicate]SQL 查询不工作 - 没有理由? [复制]
【发布时间】:2016-05-14 03:51:17
【问题描述】:

我有问题。我创建了一个 SQL 查询,向数据库中插入一些内容:

INSERT INTO order (kundennummer,empfaenger,adresse,plz,ort,land,email,time,approvalPending) 
VALUES ('232784', 'Niklas Peters', 'Some Stret', 'PostalCode', 'Wien', 'AT', 'email@email.com', '1454593142', '1')

但我总是得到错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 近'订单 (kundennummer,empfaenger,adresse,plz,ort,land,email,time,approvalPending) ' 在第 1 行

我的代码是 PHP

$sql = "INSERT INTO order (kundennummer,empfaenger,adresse,plz,ort,land,email,time,approvalPending) VALUES ('".$kdnr."', '".$emp."', '".$adresse."', '".$plz."', '".$ort."', '".$land."', '".$email."', '".$time."', '1')";

我只是不知道出了什么问题 - 我是瞎了吗?

干杯 - 很高兴得到帮助!

【问题讨论】:

  • order 是保留词,需要反引号。根据您对变量的分配,您也可能会使用此代码进行 SQL 注入。
  • 您好,通过手动添加数据库是否有效?

标签: php mysql


【解决方案1】:

带反引号的报价单:

INSERT INTO `order` (kundennummer,empfaenger,adresse,plz,ort,land,email,time,approvalPending) 
VALUES ('232784', 'Niklas Peters', 'Some Stret', 'PostalCode', 'Wien', 'AT', 'email@email.com', '1454593142', '1');

ORDER (R)reserved word

如果您引用保留字,则允许它们作为标识符

【讨论】:

  • 感谢一百万!!!我不知道 Order 是一个保留词...你永远不会停止学习 :)
【解决方案2】:

您的表名与reserved word 匹配,因此需要在 SQL 查询中引用,例如

INSERT INTO `order` (kundennummer,empfaenger,adresse,plz,ort,land,email,time,approvalPending) VALUES ('232784', 'Niklas Peters', 'Some Stret', 'PostalCode', 'Wien', 'AT', 'email@email.com', '1454593142', '1')

注意。从 PHP 调用它时,您可能需要考虑使用准备好的查询,如 PDO 等。

【讨论】:

  • “引用”不等于back-ticked。 ¯\_(ツ)_/¯
  • @JayBlanchard 手册将其称为“引用”:“如果您按照第 9.2 节“架构对象名称”中所述引用保留字,则允许它们作为标识符:“
  • 我知道确实如此,我们可以比文档更好。
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 2010-10-16
  • 1970-01-01
  • 2012-09-13
  • 2015-09-21
  • 2017-03-15
  • 1970-01-01
相关资源
最近更新 更多