openresty 前端開發入門五之Mysql篇

2021-09-02 17:14:03 字數 1949 閱讀 6323

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上找得到 而且上面也有例項 由於官網給出的例子比較基本,也比較多,所以我這裡主要介紹一些怎麼封裝一下,簡化我們呼叫...