Hi 各位大神们,
我在使用mysql.lua库的时候封装了一个mysql
帮助类如下:
local mysql =
require
"resty.mysql";
local _M = {
--mysql配置信息
host ="10.0.*.*",
port = 3306,
database =
"*****",
user = "****",
password =
"****_11011",
charset =
"utf8"
}
local _mt = {__index = _M};
function _M.new(
self )
local db,err = mysql:new();
if not db
then
ngx.log(ngx.INFO,"failed
to init mysql:"..err);
-- ngx.say ("failed to init mysql:"..err);
return;
end
local ok , err, errcode , sqlstate = db :connect
{
host =
self.host,
port =
self.port,
database =
self .database,
user =
self. user,
password =
self.password,
charset =
self.charset,
}
if not ok
then
ngx.log(ngx.INFO,"failed
to connect: ".. err );
return;
end
local times, err = db:get_reused_times();
if times
then
-- ngx.log(ngx.INFO,"db connect
重复利用次数:",times);
else
ngx.log(ngx.ERR,err);
end
self.db
= db;
return
setmetatable(_M , _mt);
-- return self;
end
-- mysql语句的查询方法
function _M.sql_query(self,
sql_str )
local res,err,errcode,sqlstate =
self.db:query(sql_str);
local sql_result = res;
local i =
1
while err ==
"again"
do
res, err, errcode, sqlstate =
self.db:read_result()
if not res
then
ngx.log(ngx.ERR,
"bad result #", i,
": ", err,
": ", errcode,
": ", sqlstate,
".")
return ngx.exit(500)
end
i = i +
1
end
return
true,cjson.encode(sql_result),nil,nil;
end
return _M;
使用的时候是这样调用的:
local mysql_helper =
require ("mysql_helper");
local mysql = mysql_helper:new();
ngx.log(ngx.INFO,sql);
return mysql:sql_query(sql);
然后我在日志中发现mysql.lua库有几率报错如下:
2017/09/19 14:50:54 [error] 19434#0: *600712 lua entry thread aborted: runtime error: /usr/local/lualib/resty/mysql.lua:253: bad request
stack traceback:
coroutine 0:
[C]: in function 'receive'
/usr/local/lualib/resty/mysql.lua:253: in function '_recv_packet'
/usr/local/lualib/resty/mysql.lua:836: in function 'read_result'
请问,是什么原因导致的?是我封装的问题吗?哪里使用的不对么?感谢解答