设为首页 收藏本站
查看: 950|回复: 0

[经验分享] openresty 前端开发入门五之Mysql篇

[复制链接]

尚未签到

发表于 2017-12-12 22:02:08 | 显示全部楼层 |阅读模式
  openresty 前端开发入门五之Mysql篇

这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户
  操作mysql主要用到了lua-resty-mysql库,代码可以在github上找得到
  而且上面也有实例代码
  由于官网给出的例子比较基本,代码也比较多,所以我这里主要介绍一些怎么封装一下,简化我们调用的代码
  lua/mysql.lua
  

local mysql = require "resty.mysql"  

  
local config = {
  host = "localhost",
  port = 3306,
  database = "mysql",
  user = "root",
  password = "admin"
  
}
  

  
local _M = {}
  

  

  
function _M.new(self)
  local db, err = mysql:new()
  if not db then
  return nil
  end
  db:set_timeout(1000) -- 1 sec
  

  local ok, err, errno, sqlstate = db:connect(config)
  

  if not ok then
  return nil
  end
  db.close = close
  return db
  
end
  

  
function close(self)
  local sock = self.sock
  if not sock then
  return nil, "not initialized"
  end
  if self.subscribed then
  return nil, "subscribed state"
  end
  return sock:setkeepalive(10000, 50)
  
end
  

  
return _M
  

  其实就是简单把连接,跟关闭做一个简单的封装,隐藏繁琐的初始化已经连接池细节,只需要调用new,就自动就链接了redis,close自动使用连接池
  lua/hello.lua
  

local cjson = require "cjson"  
local mysql = require "mysql"
  
local req = require "req"
  

  
local args = req.getArgs()
  

  
local name = args['name']
  

  
if name == nil or name == "" then
  name = "root"   
  
end
  

  
name = ngx.quote_sql_str(name) -- SQL 转义,将 ' 转成 \', 防SQL注入,并且转义后的变量包含了引号,所以可以直接当成条件值使用
  

  
local db = mysql:new()
  

  
local sql = "select * from user where User = " .. name
  

  
ngx.say(sql)
  
ngx.say("<br/>")
  

  
local res, err, errno, sqlstate = db:query(sql)
  
db:close()
  
if not res then
  ngx.say(err)
  return {}
  
end
  

  
ngx.say(cjson.encode(res))
  

  

  访问
  
http://localhost/lua/hello?name=root
  即可获取mysql中的name为root的的所有用户,如果没有name参数,则默认获取root的值
  从输出的数据中,可以看出res其实是一个数组,而且不管返回的数据是多少条,它都是一个数组,当我们查询的结果只有一条的时候,可以通过 res[1] 来获取一条记录,每一行数据又是一个table,可以通过列名来得到value
  ok,到这里我们已经可以获取用户输入的值,并且从mysql中获取数据,然后返回json数据了,已经可以开发一些简单的接口了
  示例代码 参见demo5部分

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423478-1-1.html 上篇帖子: 【MySQL】MySQL5.7的安装与配置 下篇帖子: MySQL 5.7.18 解压版安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表