开发者社区> 路人jia> 正文

openresty 前端开发入门五之Mysql篇

简介:
+关注继续查看

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部分

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端开发入门
作为一名阿里云开发者社区的博主,我将接着分享关于前端开发的编程信息。
54 0
微信小程序开发入门与实战(小程序与前端开发的区别)
微信小程序开发入门与实战(小程序与前端开发的区别)
67 0
前端入门 前端自学路线 web开发前端如何学习
前端入门 前端自学路线 web开发前端如何学习
59 0
前端温习(一):JavaScript入门
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数… ,JavaScript 也允许自定义对象。
16 0
前端入门ArcGIS教程(一)(下)
本文适合对图形、地图、可视化感兴趣的小伙伴阅读。
92 0
前端入门ArcGIS教程(一)(上)
本文适合对图形、地图、可视化感兴趣的小伙伴阅读。
295 0
JQuery JavaScript常用API整理(前端入门必学)
JQuery JavaScript常用API整理(前端入门必学)
64 0
前端技术-vue 入门 | 学习笔记
简介:快速学习前端技术-vue 入门
59 0
Web前端学习:HTML基础【入门宝典】3
Web前端学习:HTML基础【入门宝典】
41 0
Web前端学习:HTML基础【入门宝典】2
Web前端学习:HTML基础【入门宝典】
29 0
+关注
路人jia
java 程序员出生,喜欢捣鼓前端、服务器,喜欢学习各种语言,乐于学习,没事打打农药。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
前端代码是怎样智能生成的
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像