五、lua的语法( 五 )


(1)用模块和lua-resty-mysql模块:这两个模块是安装时默认安装的 。
(2)使用()模块:需要单独安装,这个库现不在中 。
lua-resty-mysql
lua-resty-mysql是开发的模块,使用灵活、功能强大,适合复杂的业务场景,同时支持存储过程的访问 。
使用lua-resty-mysql实现数据库的查询
步骤一准备MySQL
host: 192.168.38.131port: 3306username:rootpassword:123456
创建一个数据库表及表中的数据 。
create database nginx_db;use nginx_db;create table users(id int primary key auto_increment,username varchar(30),birthday date,salary double);insert into users(id,username,birthday,salary) values(null,"TOM","1988-11-11",10000.0);insert into users(id,username,birthday,salary) values(null,"JERRY","1989-11-11",20000.0);insert into users(id,username,birthday,salary) values(null,"ROWS","1990-11-11",30000.0);insert into users(id,username,birthday,salary) values(null,"LUCY","1991-11-11",40000.0);insert into users(id,username,birthday,salary) values(null,"JACK","1992-11-11",50000.0);
数据库连接四要素:
driverClass=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.38.131:3306/nginxusername=rootpassword=123456
步骤二:API学习
(1)引入"resty.mysql"模块local mysql = require "resty.mysql"(2)new创建一个MySQL连接对象,遇到错误时,db为nil,err为错误描述信息语法: db,err = mysql:new()(3)connect尝试连接到一个MySQL服务器语法:ok,err=db:connect(options),options是一个参数的Lua表结构,里面包含数据库连接的相关信息host:服务器主机名或IP地址port:服务器监听端口,默认为3306user:登录的用户名password:登录密码database:使用的数据库名(4)set_timeout设置请求的超时时间(ms),包括connect方法语法:db:set_timeout(time)(5)close关闭当前MySQL连接并返回状态 。如果成功,则返回1;如果出现任何错误,则将返回nil和错误描述 。语法:db:close()(6)send_query异步向远程MySQL发送一个查询 。如果成功则返回成功发送的字节数;如果错误,则返回nil和错误描述语法:bytes,err=db:send_query(sql)(7)read_result从MySQL服务器返回结果中读取一行数据 。res返回一个描述OK包或结果集包的Lua表,语法:res, err, errcode, sqlstate = db:read_result() res, err, errcode, sqlstate = db:read_result(rows) :rows指定返回结果集的最大值,默认为4如果是查询,则返回一个容纳多行的数组 。每行是一个数据列的key-value对,如{{id=1,username="TOM",birthday="1988-11-11",salary=10000.0},{id=2,username="JERRY",birthday="1989-11-11",salary=20000.0}}如果是增删改,则返回类上如下数据{insert_id = 0,server_status=2,warning_count=1,affected_rows=2,message=nil}返回值:res:操作的结果集err:错误信息errcode:MySQL的错误码,比如1064sqlstate:返回由5个字符组成的标准SQL错误码,比如42000
步骤三:效果实现
location /testMysql{default_type 'text/html';content_by_lua_block{local mysql = require "resty.mysql"local db = mysql:new()local ok,error = db:connect{host = "192.168.38.131",port = 3306,user ="root",password="123456",database="nginx"}db:set_timeout(1000)db:send_query("select * from users where id=1")local res,err,errcode,sqlstate = db:read_result()ngx.say(res[1].id..","..res[1].username..","..res[1].birthday..","..res[1].salary)db:close()}}
问题
1.如何获取返回数据的内容2.如何实现查询多条数据3.如何实现数据库的增删改操作
使用lua-cjson处理查询结果