Когда 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. Я не уверен, что этот факт имеет значение, хотя.

0 ответов

Другие вопросы по тегам