开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 205|回复: 0
收起左侧

[技术分享] Fastweb-Lua两种方式操作MySQL

[复制链接]
结帖率:45% (5/11)
发表于 2024-6-11 16:59:54 | 显示全部楼层 |阅读模式   江西省上饶市
开源项目:fwlua.com

本文演示两种方式处理MySQL请求与数据
示例演示如何连接、cha询、删除与更新,SQL在文章底部。
原生预处理方式
  • 优点:高度自定义,方便处理复杂逻辑与数据
  • 缺点:不如语句构建器方案简单

[JavaScript] 纯文本查看 复制代码
local dkjson = require("dkjson")
local conn = mysql_conn.new()

-- 建立连接
function mysql_connect()
    local conn_result = conn:connect("127.0.0.1","root","root","test","utf8mb4",3306)
    if conn_result == 0 then
        -- 连接成功
        return true
    elseif conn_result == 1 then
        -- 连接超时
        return false,"timeout"
    elseif conn_result == 2 then
        -- 连接错误
        return false,conn:last_error()
    end
end
-- 清空示例
function mysql_delete()
    -- 清空数据
    local ppst = conn:setsql("DELETE FROM users")
    ppst:update()
end
-- 插入数据
function mysql_insert()
    local ppst = conn:setsql("INSERT INTO users(username,password,age,data,head)VALUES(?,?,?,?,?)")
    -- 文本
    ppst:set_str(1,"fastweb")
    ppst:set_str(2,"123456")
    -- 数字
    ppst:set_i32(3,25)
    -- 二进制
    ppst:set_str(4,"996\x0088")
    -- 字节流
    local head_file = io.open(website_dir().."/head.png", "rb")
    local head_content = head_file:read("all")
    head_file:close()
    ppst:set_blob(5,head_content)

    ppst:update()
end
-- 更新数据
function mysql_update()
    local ppst = conn:setsql("UPDATE users SET age = ? WHERE username = ?")
    ppst:set_i32(1,66)
    ppst:set_str(2,"fastweb")
    ppst:update()
end
-- cha询数据
function mysql_select()
    local ppst = conn:setsql("SELECT * FROM users WHERE age > ?")
    ppst:set_i32(1,0)
    -- cha询结果
    local result = ppst:query();

    local users = {}
    while result:next() do
        local user = {
            username = result:get("username"),
            password = result:get("password"),
            age = result:get("age"),
            data_size = #result:get("data"),
            head_size = #result:get("head")
        }
        table.insert(users,user)
    end
    return users;
end


-- 连接
local is_success,error_msg = mysql_connect()
if is_success == false then
    response:send("connect failed,"..error_msg)
    return
end

mysql_delete();
mysql_insert();
mysql_select();
local users = mysql_select()
response:send(dkjson.encode(users))


SQL构建器方式
  • 优点:集成度高、美观、代码简洁
  • 缺点:不适用较复杂的SQL语句

[JavaScript] 纯文本查看 复制代码
local dkjson = require("dkjson")
local conn = mysql_conn.new()

-- 建立连接
function mysql_connect()
    local conn_result = conn:connect("127.0.0.1","root","root","test","utf8mb4",3306)
    if conn_result == 0 then
        -- 连接成功
        return true
    elseif conn_result == 1 then
        -- 连接超时
        return false,"timeout"
    elseif conn_result == 2 then
        -- 连接错误
        return false,conn:last_error()
    end
end
-- 清空示例
function mysql_delete()
    -- 清空数据
    conn:delete():table("users"):exec()
end
-- 插入数据
function mysql_insert()
    -- 字节流
    local head_file = io.open(website_dir().."/head.png", "rb")
    local head_content = head_file:read("all")
    head_file:close()

    local insert = conn:insert():table("users")
        :set_str("username","fastweb")
        :set_str("password","123456")
        :set_i32("age",25)
        :set_blob("data","996\x0088")
        :set_blob("head",head_content)
        :exec()
end
-- 更新数据
function mysql_update()
    conn:update():table("users"):set_i32("age",66):where_str("username","=","fastweb"):exec()
end
-- cha询数据
function mysql_select()
    return conn:select():table("users"):field({"username","password","age"}):where_i32("age",">",0):query():table()
end

-- 连接
local is_success,error_msg = mysql_connect()
if is_success == false then
    response:send("connect failed,"..error_msg)
    return
end

mysql_delete();
mysql_insert();
mysql_select();
local users = mysql_select()
response:send(dkjson.encode(users))


SQL文件
[SQL] 纯文本查看 复制代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `data` binary(255) NULL DEFAULT NULL,
  `head` blob NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;




您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表