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名称)必须固定在查询字符串中,而不是作为查询参数添加。
我的 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名称)必须固定在查询字符串中,而不是作为查询参数添加。