MySQL 带有 var 的 FROM 的语法

MySQL Syntax with FROM with a var

我的 MySQL 语法有一些问题。

这是我的代码:

Config.SocietyMoneyTable = 'addon_account_data'

local result = MySQL.Sync.fetchAll("SELECT money FROM @account_table WHERE account_name = @society", {
            ['@account_table'] = Config.SocietyMoneyTable,
            ['@society'] = society
        })

错误:

[ERROR] [MySQL] [maze_management] An error happens on MySQL for query "SELECT money FROM
'addon_account_data' WHERE account_name = 'society_police'": 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 ''addon_account_data' WHERE account_name = 'society_police''
at line 1

当我将@account_table 更改为Config.SocietyMoneyTable 中的字符串时,语法确实有效。但是我需要这个配置所以这对我来说不是解决方案。

@ 印记注释的查询参数只能用于代替标量值,而不是 table 名称或其他标识符。您需要使用字符串格式将您的可配置 table 名称添加到查询中,而不是查询参数。

类似于以下内容:

Config.SocietyMoneyTable = 'addon_account_data'

local queryString = string.format("SELECT money FROM `%s` WHERE account_name = @society",
    Config.SocietyMoneyTable)

local result = MySQL.Sync.fetchAll(queryString, {
            ['@society'] = society
        })

我没有测试过这段代码,我也不经常使用Lua,所以如果有错误,我将不得不留给你解决。但它至少应该表明一个原则:标识符(如table名称)必须固定在查询字符串中,而不是作为查询参数添加。