openresty前端開發入門五之Mysql篇
openresty 前端開發入門五之Mysql篇
這章主要演示怎麼通過lua連線mysql,並根據使用者輸入的name從mysql獲取資料,並返回給使用者
操作mysql主要用到了lua-resty-mysql庫,程式碼可以在github上找得到
而且上面也有例項程式碼
由於官網給出的例子比較基本,程式碼也比較多,所以我這裡主要介紹一些怎麼封裝一下,簡化我們呼叫的程式碼
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("<br/>")
local res, err, errno, sqlstate = db:query(sql)
db:close()
if not res then
ngx.say(err)
return {}
end
ngx.say(cjson.encode(res))
訪問
http://localhost/lua/hello?name=root
即可獲取mysql中的name為root的的所有使用者,如果沒有name引數,則預設獲取root的值
從輸出的資料中,可以看出res其實是一個陣列,而且不管返回的資料是多少條,它都是一個陣列,當我們查詢的結果只有一條的時候,可以通過 res[1] 來獲取一條記錄,每一行資料又是一個table,可以通過列名來得到value
ok,到這裡我們已經可以獲取使用者輸入的值,並且從mysql中獲取資料,然後返回json資料了,已經可以開發一些簡單的介面了
示例程式碼 參見demo5部分
相關文章
- openresty前端開發入門三之JSON篇REST前端JSON
- openresty前端開發入門四之Redis篇REST前端Redis
- openresty前端開發入門二REST前端
- openresty前端開發序REST前端
- Web 前端開發之小白入門Web前端
- OpenResty入門REST
- openresty前端開發進階二之https後端REST前端HTTP後端
- 前端開發快速入門前端
- openresty前端開發輕量級MVC框架封裝一(控制器篇)REST前端MVC框架封裝
- Mysql常用語法及入門開篇(一)MySql
- Go-Spring 入門篇(五)GoSpring
- web前端開發怎麼入門?Web前端
- webpack4.0 入門篇 - 構建前端開發的基本環境Web前端
- 入門MySQL——架構篇MySql架構
- Python:介面開發,wx入門篇Python
- Python開發的入門教程(五)-setPython
- Web前端開發入門之網頁製作三要素Web前端網頁
- Web前端開發入門之網頁製作三要素!Web前端網頁
- Laravel 入門篇之開發環境 Homestead 的安裝配置Laravel開發環境
- [MySQL光速入門]000 開篇介紹&目錄MySql
- 五線譜入門完結篇
- 入門MySQL——DML語句篇MySql
- 《MySQL 入門教程》第 14 篇 MySQL 常用函式之數學函式MySql函式
- 《MySQL 入門教程》第 02 篇 MySQL 安裝MySql
- 《MySQL 入門教程》第 17 篇 MySQL 變數MySql變數
- 《MySQL 入門教程》第 01 篇 MySQL 簡介MySql
- Python和前端開發哪個更好入門?Python前端
- 入門MySQL——基礎語句篇MySql
- go併發之goroutine和channel,併發控制入門篇Go
- web_前端開發JS框架篇-Vue基礎入門版-基礎語法Web前端JS框架Vue
- node之tcp篇入門理解TCP
- 效能測試之入門篇
- Mac之Android Studio開發NDK入門MacAndroid
- Web開發初探之JavaScript 快速入門WebJavaScript
- 入門級前端開發可能需要的安利列表前端
- 面向前端開發的python入門圖譜前端Python
- web前端開發教程,最全JavaScript入門講解Web前端JavaScript
- 前端【小程式】01-入門篇【註冊小程式賬號】【開發環境搭建】前端開發環境