openresty 前端開發入門五之mysql篇
#### 這章主要演示怎麼通過lua連線mysql,並根據使用者輸入的name從mysql獲取資料,並返回給使用者
操作mysql主要用到了lua-resty-mysql庫,**可以在[github](上找得到
而且上面也有例項**
由於官網給出的例子比較基本,**也比較多,所以我這裡主要介紹一些怎麼封裝一下,簡化我們呼叫的**
lua/mysql.lua
```local mysql = require "resty.mysql"
local config =
local _m = {}
function _m.new(self)
local db, err = mysql:new()
if not db then
return nil
enddb:set_timeout(1000) -- 1 sec
local ok, err, errno, sqlstate = db:connect(config)
if not ok then
return nil
enddb.close = close
return db
endfunction close(self)
local sock = self.sock
if not sock then
return nil, "not initialized"
endif self.subscribed then
return nil, "subscribed state"
endreturn 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 = " .. name
ngx.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部分
openresty 前端開發入門二
這一章主要介紹介紹怎麼獲取請求引數,並且處理之後返回資料 我們知道http請求通常分為兩種,分別是get,post,在http協議中,get引數通常會緊跟在uri後面,而post請求引數則包含在請求體中,nginx預設情況下是不會讀取post請求引數的,最好也不要試圖使改變這種行為,因為大多數情況下...
openresty 開發入門
文章目錄 1 openresty 安裝 2 lua 測試程式 3 nginx.conf 檔案配置 4 系統啟動1 openresty 安裝 2 tar xzvf openresty 1.9.15.1.tar.gz 3 進入 openresty 1.9.15.1 4 configure prefix ...
openresty 前端開發入門四之Redis篇
這章主要演示怎麼通過lua連線redis,並根據使用者輸入的key從redis獲取value,並返回給使用者 操作redis主要用到了lua resty redis庫,可以在github上找得到 而且上面也有例項 由於官網給出的例子比較基本,也比較多,所以我這裡主要介紹一些怎麼封裝一下,簡化我們呼叫...