110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								--- Created by mark.
							 | 
						|||
| 
								 | 
							
								--- Desc: 演示对OpenResty中使用Lua对MySQL操作
							 | 
						|||
| 
								 | 
							
								--- Note:本Lua脚本借鉴了网络,未经测试,仅供参考,也不提供任何技术支持
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								local function close_db(db)
							 | 
						|||
| 
								 | 
							
								    if not db then
							 | 
						|||
| 
								 | 
							
								        return
							 | 
						|||
| 
								 | 
							
								    end
							 | 
						|||
| 
								 | 
							
								    db:close()
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local mysql = require("resty.mysql")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local db, err = mysql:new()
							 | 
						|||
| 
								 | 
							
								if not db then
							 | 
						|||
| 
								 | 
							
								    ngx.say("new mysql error : ", err)
							 | 
						|||
| 
								 | 
							
								    return
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								db:set_timeout(1000)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local props = {
							 | 
						|||
| 
								 | 
							
								    host = "127.0.0.1",
							 | 
						|||
| 
								 | 
							
								    port = 3306,
							 | 
						|||
| 
								 | 
							
								    database = "mysql",
							 | 
						|||
| 
								 | 
							
								    user = "root",
							 | 
						|||
| 
								 | 
							
								    password = "123"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local res, err, errno, sqlstate = db:connect(props)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("connect to mysql error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								---------------------------------------
							 | 
						|||
| 
								 | 
							
								-- 执行SQL语句范例
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local create_table_sql = "create table test(id int primary key auto_increment, ch varchar(100))"
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(create_table_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("create table error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local drop_table_sql = "drop table if exists test"
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(drop_table_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("drop table error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local insert_sql = "insert into test (ch) values('hello')"
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(insert_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("insert error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(insert_sql)
							 | 
						|||
| 
								 | 
							
								ngx.say("insert rows : ", res.affected_rows, " , id : ", res.insert_id, "<br/>")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local update_sql = "update test set ch = 'hello2' where id =" .. res.insert_id
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(update_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("update error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								ngx.say("update rows : ", res.affected_rows, "<br/>")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local select_sql = "select id, ch from test"
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(select_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								for i, row in ipairs(res) do
							 | 
						|||
| 
								 | 
							
								    for name, value in pairs(row) do
							 | 
						|||
| 
								 | 
							
								        ngx.say("select row ", i, " : ", name, " = ", value, "<br/>")
							 | 
						|||
| 
								 | 
							
								    end
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								ngx.say("<br/>")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local ch_param = ngx.req.get_uri_args()["ch"] or ''
							 | 
						|||
| 
								 | 
							
								local query_sql = "select id, ch from test where ch = " .. ngx.quote_sql_str(ch_param)
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(query_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("select error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								for i, row in ipairs(res) do
							 | 
						|||
| 
								 | 
							
								    for name, value in pairs(row) do
							 | 
						|||
| 
								 | 
							
								        ngx.say("select row ", i, " : ", name, " = ", value, "<br/>")
							 | 
						|||
| 
								 | 
							
								    end
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								local delete_sql = "delete from test"
							 | 
						|||
| 
								 | 
							
								res, err, errno, sqlstate = db:query(delete_sql)
							 | 
						|||
| 
								 | 
							
								if not res then
							 | 
						|||
| 
								 | 
							
								    ngx.say("delete error : ", err, " , errno : ", errno, " , sqlstate : ", sqlstate)
							 | 
						|||
| 
								 | 
							
								    return close_db(db)
							 | 
						|||
| 
								 | 
							
								end
							 | 
						|||
| 
								 | 
							
								ngx.say("delete rows : ", res.affected_rows, "<br/>")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								close_db(db)
							 |