【问题标题】:ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to useER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法
【发布时间】:2020-03-25 15:24:03
【问题描述】:
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] An error happens on MySQL for query "INSERT INTO position (id, x, y, z) VALUES (@id, 0, 0, 0)": ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'position (id, x, y, z) VALUES (@id, 0, 0, 0)' at line 1

有人知道怎么解决吗?我的 MariaDB 版本是 10.4.11-MariaDB 。谢谢!

【问题讨论】:

    标签: mysql lua mariadb mariadb-10.4 fivem


    【解决方案1】:

    the right syntax to use near 'position (id, x, y, z) VALUES (@id, 0, 0, 0)' at line 1

    在我看来,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,因为@ 987654335@ 专栏是,我希望。 INT 列。

    【讨论】:

    • 嗨!谢谢您的帮助!我对数据库不太了解,但我了解到 ID 应该自动递增,但是,这不是通用 ID。它应该返回我一个已经生成的 ID,在我的测试之后它会这样做,所以这个 ID 不应该自动递增。我应该添加另一个自动递增的 ID 行吗?表格是这样的:imgur.com/a/myByk8F(不知道怎么查看网站里的代码)
    • @Almeidowski 你好。是的,一个好的做法是将 INT 类型的 id 列设置为主键并启用 auto_increment。由于您将此当前 id 列用于其他识别目的,因此您当前的查询是正确的并且应该可以工作。问题仍然是,您使用的任何语言都没有检索当前 id 列的实际 id 值,如错误消息所示。它仍然显示为@id,我猜这是不正确的。因此,这不是您使用的 sql 的数学问题,而是您如何为 id 列传递参数值,somwhere 出现错误。
    • @Almeidowski 但是,由于我不熟悉/不认识您发布的代码(除了应该没问题的 SQL 代码)我在这方面无法帮助您..
    • 好的,这很尴尬。显然我没有任何东西可以获取玩家的 id,我在旧代码上拥有它,我认为我也在这个代码上拥有它。问题是,我现在遇到了同样的错误,但值正确。例如:imgur.com/a/QsClpFr
    【解决方案2】:

    position 是一个关键字。

    A 计划,到处都用反引号。

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

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

    注意:当它说“near...”时,它几乎总是指向或紧跟在违规标记之后。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        相关资源
        最近更新 更多