当我使用luasql
查询 MySQL 数据库时,我遇到了一个奇怪的错误,这似乎是由mysql_field_count()
' 意外返回 0 的SELECT
语句引起的。
我有两个现有的数据库 A、B 和以下 lua 代码:
local conn = assert(env:connect(db, user, passwd, host))
local cur = assert(conn:execute([[
SELECT A.field1, B.field2 from A JOIN B on A.id = B.id
]])
local row = cur:fetch({}, "a")
现在代码在最后一行失败了,抱怨“试图索引本地'cur'(一个数字值)”。文档说execute()
如果有结果则返回游标对象,否则返回受命令影响的行数。这在源代码中很明显luasql.mysql
。我的代码中的断言表明两者mysql_real_query()
都mysql_store_result()
成功了。所以对我们最终得到一个数字而不是游标对象这一事实的唯一解释是它mysql_field_count()
返回了 0。但这不是一个SELECT
语句吗?它不应该返回2吗?
请注意,此问题很少发生。但是当它发生时,通常会在同一个盒子上运行同一个 lua 脚本的多个实例。我不确定这个事实是否相关。