Когда mysql_field_count() вернет 0 для оператора SELECT?
Когда я использовал 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. Я не уверен, что этот факт имеет значение, хотя.