示例地址 www.dreamyouxi.com 中的留言功能

在 C++ 这侧把数据库接口封装好之后,将其暴露给 Lua 使用,并在项目中添加对应的 Lua 支持库。

sql.lua

local t={};
                
                t.config=require("sql_config");
                
                
                
                --create a sql obj for lua
                function t:create()
                    return  SQL_Script_create();
                
                end
                
                -- connect the ins to mysql
                function t:connect(ins)
                    local c=t.config;
                
                    local bool = SQL_Script_connect(ins,c.host , c.port , c.user , c.pwd , c.db);
                
                    return bool;
                end
                
                --release res
                function t:release(ins)
                    SQL_Script_release(ins);
                end
                
                --exec sql
                function t:execute(ins,encoding,sql,col_count)
                  local t={ SQL_Script_execute(ins,encoding,sql,col_count)};
                
                 if col_count == 0 then
                    if t[1] == "OK" then
                     return "OK";
                     else
                     return nil;
                    end
                 end
                
                
                   return t;
                end
                
                
                return t;

MsgBoard.lua

local t={};
                
                local suc_str= "<html lang='en'><head><meta charset='utf-8'><meta http-equiv='refresh'content='1;url=list.html'> </head><body><p>留言成功,自动跳转中......</p></body></html>";
                
                local function makeMsg(name,txt,time)
                	local ret="<p>";
                	ret = ret ..  os.date("%Y-%m-%d %H:%M",time   ) .."   "   ;
                	ret = ret  .. name  .. " 说:" ;
                	ret = ret .. txt;
                	ret =ret .. "</p>"
                
                return ret;
                
                end
                
                function t:doRequest(p)
                	local name = p["name"];
                	local msg= p["msg"];
                	if p["list"]~=nil then
                		local ret="";
                	--	ret =ret .. makeMsg("7:20","张3532532535三","哈啊哈");
                
                		local ins = sql:create();
                		sql:connect(ins);
                
                		local t= sql:execute(ins, "UTF8" ,"select name,msg,time from msg  order by time DESC" ,3);
                
                		local len = table.getn(t);
                		for i=1 , len,3 do
                			ret = ret ..  makeMsg(t[i],t[i+1],t[i+2])
                		end
                
                
                 		sql:release(ins);
                
                		return  packCustomHtmlData(ret)
                	end
                
                
                
                	if name == nil or name == "" then
                		return packCustomHtmlData("昵称不能为空");
                	end
                
                	if msg == nil or msg == "" then
                		return packCustomHtmlData("内容不能为空")
                	end
                
                	name= skipWhite(name);
                	msg=skipWhite(msg)
                	print(   "msg ".. name .. "  "  ..  msg  );
                
                		local ins = sql:create();
                		sql:connect(ins);
                
                	local t= sql:execute(ins,"GB2312","INSERT INTO msg VALUES(\"" ..  name  .. "\",\"".. msg .."\",".. (os.time()) ..")" ,0);
                    --local t= sql:execute(ins,"INSERT INTO msg VALUES(\"1\",\"2\",\"3\") " ,0);
                
                 		sql:release(ins);
                
                
                	if  t ~= nil  then
                
                		return suc_str;
                
                	end
                	return packCustomHtmlData( "留言失败"   );
                
                
                --	return   " welcome  MsgBoard "
                
                end
                
                
                return t;