ER_PARSE_ERROR:您的SQL语法中有错误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用

MySQL.Async.fetchAll('INSERT INTO position (id, x, y, z) VALUES (@id, @x, @y, @z)',
{['@id'] = identifier, ['@x'] = coords.x, ['@y'] = coords.z, ['@z'] = coords.z})

大家好,我正在学习编程,并为我的FiveM服务器编写了上面的简单命令,但出现了下面的代码,当它应该是正确的时,我检查了一切都与id和coords都没有问题,所以问题必须是语法错误。

[MySQL] [testeServerClient] MySQL出现错误:"INSERT INTO position (id, x, y, z) VALUES (@id, 0, 0, 0)": ER_PARSE_ERROR:您的SQL语法中有错误;请检查与您的MariaDB服务器版本相对应的手册,以获取正确的语法使用 near 'position (id, x, y, z) VALUES (@id, 0, 0, 0)' on line 1

有人知道如何修复它吗?我的MariaDB版本是10.4.11-MariaDB。谢谢!

点赞
用户6917318
用户6917318
在第一行附近出现了语法错误,'position (id, x, y, z) VALUES (@id, 0, 0, 0)'
据我所看,您在‘values’中没有传递‘ID’。如果‘ID’列设置为‘auto_increment’,您甚至不应该将其包含在插入中。

如果插入新行时,‘ID’列已开启‘auto_increment’,则正确的语法如下:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);


否则,除了查询之外似乎存在问题,因为它获取了'x y z'列的'0 0 0'值,但没有得到'ID'的值 - 它仍然显示为'@id',这是无效的,因为我希望‘ID’列是一个‘INT’列。 
2020-03-25 17:41:57
用户1766831
用户1766831

position 是一个关键字。

计划A:在每个地方都使用反引号将其括起来。

计划B:使用不同的表名。

参考资料:https://mariadb.com/kb/en/reserved-words/,我没有在MySQL的关键字列表中看到它。

注意:当它说“附近…”时,几乎总是指向或紧接着错误的标记。

2020-04-02 01:09:37
用户8764356
用户8764356

我认为问题在于您在插入查询中使用了 MySQL.Async.fetchAll而不是使用 MySQL.Sync.execute 或 MySQL.Async.execute。除非需要回调,否则尝试使用 MySQL.Sync.execute。

2020-05-05 06:55:27