mysql数据库查询抛出错误,说我有语法错误好像找不到他们?我相信它在查询的列部分

sigwle7e  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(240)

我正在创建原始mysql查询,以便使用laravel'db'facade将其插入到我的db中。我已经使用了相同类型的查询来处理另一个数据库表,但是它在这个特定的表上抛出了错误。

1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1064 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 'group,originating_attorney,practice_area,responsible_attorney,statute_of_limitat' at line 1")
  /home/vagrant/Code/proj/vendor/laravel/framework/src/Illuminate/Database/Connection.php:452

2   PDO::prepare("INSERT INTO firm_matters(id,etag,display_number,custom_number,description,status,location,client_reference,billable,maildrop_address,billing_method,open_date,close_date,pending_date,client,contingency_fee,custom_rate,group,originating_attorney,practice_area,responsible_attorney,statute_of_limitations,user,account_balances,custom_field_vals,custom_field_set_associations,created_at,updated_at) VALUES (...)

我已经检查了mysql的保留关键字,我认为我没有违反任何规则。能不能找个精通mysql的人来看看我的查询是否正确。

pxy2qtax

pxy2qtax1#

我已经检查了mysql的保留关键字
不,你没有

syntax to use near 'group,originating
                     ^^^^^ here
``` `GROUP` 是保留字https://dev.mysql.com/doc/refman/5.7/en/keywords.html
只要不创建“原始mysql查询”,下次就可以了。您很聪明,可以使用框架,但您使用的是“原始mysql查询”。别这么做。
pinkon5k

pinkon5k2#

根据您的mysql版本,至少group是保留关键字
https://dev.mysql.com/doc/refman/5.7/en/keywords.html#keywords-5-7-g详图
编写原始查询时,请更改所有

column to `column`
vmdwslir

vmdwslir3#

请查看与您的mysql服务器版本对应的手册,以获取使用“group。。。
下面是关于mysql语法错误的一个技巧:当sql解析器在查询中遇到一个使它混淆的词时,错误消息会准确地显示它混淆的地方。在这种情况下 group 是解析器在查询中不希望出现的位置。
其他人也回答了这个问题 group 是mysql中的保留字。如果将保留字放在后面的记号中以分隔它们,并明确它们是标识符,而不是sql关键字,则可以将它们用作标识符(表名、列名等)。

INSERT INTO firm_matters(id, etag, display_number, custom_number, description, 
  status, location, client_reference, billable, maildrop_address, billing_method,
  open_date, close_date, pending_date, client, contingency_fee, custom_rate,
  `group`,
  originating_attorney, practice_area,responsible_attorney, statute_of_limitations, 
  user, account_balances, custom_field_vals, custom_field_set_associations,
  created_at, updated_at) VALUES (...)

@peter建议使用一个框架是因为许多框架会自动将所有标识符划入后面的记号中,以防它们是保留字。
但是您可以自己解决这个错误,而不必采用复杂的框架。要么限定标识符,至少是那些匹配mysql保留字的标识符,要么首先不要使用保留字作为标识符。
直接编写sql没有错。

相关问题