随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

openresty使用lua操作mysql

复制代码
--1) 定义数据库连接属性
local props = {
    host = "127.0.0.1",
    port = 3306,
    database = 'xukang-dev',
    user = 'root',
    password = 'root',
    charset = 'utf8mb4',
    max_packet_size = 1024 * 1024
}

-- 2) 自定义close函数
local function close_db(db)  
    if not db then  
        return  
    end
      
    --  连接池机制:不调用close,选择keepalive 确保性能
    local pool_max_idle_time = 10000 --毫秒  
    local pool_size = 100 --连接池大小  
    local ok, err = db:set_keepalive(pool_max_idle_time, pool_size)  
    if not ok then  
        -- ngx.say("set keepalive error : ", err)  
        ngx.log(ngx.ERR, "set keepalive error : ", err)
    end 
end
 
-- 3) 引入mysql实例
local mysql = require("resty.mysql")
 
-- 4) 创建实例
local db, err = mysql:new()
if not db then
    -- ngx.say("new mysql error : ", err)
    ngx.log(ngx.ERR, "new mysql error : ", err)
    return
end
 
--4) 设置超时时间
db:set_timeout(10000)
 
-- 6) 建立连接
local res,err,errno,sqlstate = db:connect(props)
-- 备注:异常判断,异常消息统一处理
if not res then
    -- ngx.say("connect to mysql error:", err,", errno:", errno,", sqlstate:", sqlstate)
    ngx.log(ngx.ERR, "connect to mysql error:", err,", errno:", errno,", sqlstate:", sqlstate)
    return close_db(db)
end
 
-- 7) sql 语句操作 -->过程省略

local select_sql = "select id, username, salt, phone from sys_user"
res, err, errno, sqlstate = db:query(select_sql)
if not res then
    ngx.say("select table error :", err,", errno", errno, ", sqlstate : ",sqlstate)
    return close_db(db)
end

-- 多条'结果集'的处理
for i, row in ipairs(res) do
    -- ngx.say(row.username, row.phone)
    for key,value in pairs(row) do
        ngx.say("select row", i," : ", key, " = ", value)
    end
    ngx.say("<br/>===================")
end

-- 8) 关闭连接 -->由于使用连接池,不需要每次都使用密码
-- close_db(db)
复制代码

 

posted on   Ruthless  阅读(9204)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示