博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openresty 前端开发入门五之Mysql篇
阅读量:6982 次
发布时间:2019-06-27

本文共 1719 字,大约阅读时间需要 5 分钟。

hot3.png

openresty 前端开发入门五之Mysql篇

这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户

操作mysql主要用到了lua-resty-mysql库,代码可以在上找得到

而且上面也有实例代码

由于官网给出的例子比较基本,代码也比较多,所以我这里主要介绍一些怎么封装一下,简化我们调用的代码

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 dbendfunction 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)endreturn _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"	endname = ngx.quote_sql_str(name) -- SQL 转义,将 ' 转成 \', 防SQL注入,并且转义后的变量包含了引号,所以可以直接当成条件值使用local db = mysql:new()local sql = "select * from user where User = " .. namengx.say(sql)ngx.say("
")local res, err, errno, sqlstate = db:query(sql)db:close()if not res then ngx.say(err) return {}endngx.say(cjson.encode(res))

访问

即可获取mysql中的name为root的的所有用户,如果没有name参数,则默认获取root的值

从输出的数据中,可以看出res其实是一个数组,而且不管返回的数据是多少条,它都是一个数组,当我们查询的结果只有一条的时候,可以通过 res[1] 来获取一条记录,每一行数据又是一个table,可以通过列名来得到value

ok,到这里我们已经可以获取用户输入的值,并且从mysql中获取数据,然后返回json数据了,已经可以开发一些简单的接口了

参见demo5部分

转载于:https://my.oschina.net/362228416/blog/818199

你可能感兴趣的文章
hdu2669 扩展欧几里得
查看>>
PHP 基础
查看>>
Delphi判断字符串是否是数字、字母、大小写字母
查看>>
POJ NOI0105-45 金币
查看>>
Project Euler Problem 15 Lattice paths
查看>>
组合模式
查看>>
Python之路番外(第三篇):Pycharm的使用秘籍
查看>>
alpha冲刺9
查看>>
Hibernate组件映射
查看>>
转:目标检测算法总结
查看>>
springmvc @valid
查看>>
抓包工具 - Fiddler - (三)
查看>>
使用Hibernate注解 @Transient
查看>>
【POJ3294】 Life Forms(SA)
查看>>
让思路更清晰——我是怎样使用思维导图的
查看>>
nohup
查看>>
iTextSharp生成pdf的一个简单例子
查看>>
php操作Access数据库
查看>>
【原译】一个可定制的WPF任务对话框
查看>>
zabbix agent 类型自带的key
查看>>