当SELECT语句返回的结果集中没有任何列时,mysql_field_count()才会返回0。

当我使用 luasql 查询 MySQL 数据库时,遇到了一个奇怪的错误,看起来是由于 mysql_field_count() 对于 SELECT 语句意外地返回0所致。

我有两个现有数据库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 脚本实例在同一台计算机上运行。我不确定这个事实是否相关。

点赞