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前端開發入門四之Redis篇REST前端Redis
- openresty前端開發入門三之JSON篇REST前端JSON
- openresty前端開發入門二REST前端
- openresty前端開發序REST前端
- 前端入門篇之div前端
- Web 前端開發之小白入門Web前端
- OpenResty入門REST
- openresty前端開發進階二之https後端REST前端HTTP後端
- 前端開發快速入門前端
- 網站開發之DIV+CSS簡單佈局網站入門篇(五)網站CSS
- openresty前端開發輕量級MVC框架封裝一(控制器篇)REST前端MVC框架封裝
- web前端開發怎麼入門?Web前端
- Eclipse開發:SWT-JFace開發入門(五)Eclipse
- webpack4.0 入門篇 - 構建前端開發的基本環境Web前端
- Mysql常用語法及入門開篇(一)MySql
- Web前端開發入門之網頁製作三要素Web前端網頁
- Web前端開發入門之網頁製作三要素!Web前端網頁
- 入門MySQL——架構篇MySql架構
- 五線譜入門完結篇
- Go-Spring 入門篇(五)GoSpring
- Python開發的入門教程(五)-setPython
- Python:介面開發,wx入門篇Python
- [MySQL光速入門]000 開篇介紹&目錄MySql
- 遊戲開發新手入門之DirectX入門(轉)遊戲開發
- Laravel 入門篇之開發環境 Homestead 的安裝配置Laravel開發環境
- 入門MySQL——DML語句篇MySql
- jQ基礎篇–外掛開發入門
- Web前端開發(五)-- jQueryWeb前端jQuery
- web_前端開發JS框架篇-Vue基礎入門版-基礎語法Web前端JS框架Vue
- go併發之goroutine和channel,併發控制入門篇Go
- Android開發入門之熟悉開發環境Android開發環境
- 《MySQL 入門教程》第 14 篇 MySQL 常用函式之數學函式MySql函式
- 《MySQL 入門教程》第 01 篇 MySQL 簡介MySql
- 《MySQL 入門教程》第 02 篇 MySQL 安裝MySql
- 《MySQL 入門教程》第 17 篇 MySQL 變數MySql變數
- Python和前端開發哪個更好入門?Python前端
- 入門級前端開發可能需要的安利列表前端
- web前端開發教程,最全JavaScript入門講解Web前端JavaScript