博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua 操作数据库
阅读量:6572 次
发布时间:2019-06-24

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

操作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 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("
")
local command = ("insert into ip_access (`ip`) values ('" .. val .. "')"); local select = ("select * from ip_access where status = 1 and ip = ('" .. addr_ip .. "')");
local res, err, errno, sqlstate = db:query(sql) db:close() if not res then ngx.say(err) return {} end ngx.say(cjson.encode(res))

访问

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

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

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

 参见demo5部分

转载于:https://www.cnblogs.com/guixiaoming/p/8359217.html

你可能感兴趣的文章
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
cocos2d-lua 开发环境搭建
查看>>
Oracle——16用户、角色和权限
查看>>
获得系统属性
查看>>
从0实现NavigationController
查看>>
A Visual Git Reference
查看>>
Tomcat 关于表单提交数据量过大导致数据丢失的问题
查看>>
gitlab hook declined错误
查看>>
金融数据库
查看>>
翻了100个程序员的朋友圈, 发现个个都是套路王
查看>>
取消从上一界面push过来后,左上角的back按钮
查看>>
如何阅读别人的代码
查看>>
为什么 ++[[]][+[]]+[+[]] = 10?
查看>>
ContentProvider
查看>>
Redis 持久化存储
查看>>
Android 自定义GridView网格布局
查看>>
关于在帧中继fr环境下的NAT网络地址转换的实验
查看>>
大海捞枕木:大数据处理平台的衍变
查看>>
2015-郭辉-项目采购管理+文档配置管理
查看>>