'ipairs' 的第 1 个参数必须为表,但参数是布尔值

控制台报错;

117: call: failed to call 'mysql:select' [string "?"]
117: bad argument #1 to 'ipairs' <table expected, got boolean>

该函数;

function openAdvertisements( player, command )
    local advertisements = { } --这些将保存我们要发送给客户端并填充我们的广告表的广告。

    if not player then player = source end

    --从数据库中获取所有广告
    for \_, ad in ipairs( exports.mysql:select('advertisements') ) do
        if tonumber( ad.expiry ) >= tonumber( getRealTime().timestamp ) then --检查广告是否过期,如果过期,就将其删除。
            ad.author = exports.mysql:select_one( "characters", { id = ad.created_by } ).charactername
            table.insert( advertisements, ad )
        else
            deleteAdvertisement( ad.id )
        end
    end

    triggerClientEvent( player, resourceName .. ":display_all", root, advertisements, exports.integration:isPlayerAdmin( player ) ) --将广告发送到客户端以创建 GUI。
end

第 117 行; for _, ad in ipairs( exports.mysql:select('advertisements') ) do leaveCs(cid)

点赞
用户7032512
用户7032512

exports.mysql:select('advertisements') 失败时会返回一个布尔值,而你不能在布尔值上使用 ipairs,因为 ipairs 只能用于表。

那么为什么 exports.mysql:select('advertisements') 调用失败?

因为表需要加引号,因为它们不是字符串,所以应该这样做:

exports.mysql:select("SELECT * FROM 'advertisements' WHERE <something>")
2018-01-22 21:30:43