在将mysql中记录集读取出来的时候,我们需要将数据从libmysql这个C库中读取到mysql数据,然后将其构造成lua的表。这里将会讲解一下C函数如何构Lua表的实例
// main.cpp
#include <iostream>
#include "lua.hpp"
int main(int argn, char *argv[])
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "test_lua.lua");
lua_getglobal(L, "dbcb");
lua_pushinteger(L, 88);
lua_pushinteger(L, 99);
lua_pushinteger(L, 10);
lua_pushinteger(L, 11);
{
lua_newtable(L);
{
lua_pushstring(L, "field");
lua_newtable(L);
{
lua_pushinteger(L, 1);
lua_pushstring(L, "field_name");
lua_settable(L, -3);
}
lua_settable(L, -3);
lua_pushstring(L, "record");
lua_newtable(L);
{
lua_pushinteger(L, 1);
lua_newtable(L);
{
lua_pushinteger(L, 1);
lua_pushinteger(L, 88);
lua_settable(L, -3);
}
lua_settable(L, -3);
}
lua_settable(L, -3);
}
}
lua_call(L, 5, 0);
lua_close(L);
Lua的脚本
-- test_lua.lua
function dbcb(id, result, sql_type, sql_cb,tbl)
print(string.format("id: %d",id))
print(string.format("result: %d",result))
print(string.format("sql_type: %d",sql_type))
print(string.format("sql_cb: %d",sql_cb))
print(string.format("tbl.field[1]: %s", tbl.field[1]))
print(string.format("tbl.record[1][1]: %d", tbl.record[1][1]))
end
输出的结果:
id: 88
result: 99
sql_type: 10
sql_cb: 11
tbl.field[1]: field_name
tbl.record[1][1]: 88