当我使用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
的{{3}}中很明显。我的代码中的断言表明mysql_real_query()
和mysql_store_result()
都成功了。因此,对于我们最终得到一个数字而不是游标对象这一事实的唯一解释是mysql_field_count()
返回0.但是它不是SELECT
语句吗?它不应该返回2?
请注意,此问题偶尔会发生。但是当它发生时,通常会有几个同一个lua脚本在同一个盒子上运行的实例。我不确定这个事实是否相关。