关于 oxmysql
oxmysql 是指导 FiveM 资源编写服务端数据库代码的 Skill,使用 oxmysql 的 Lua 或 JavaScript API。内容涵盖按结果选择查询接口、位置占位符、事务及从 mysql-async 语法迁移。
主要功能
- 01按结果类型选择 API
- 02使用位置 SQL 占位符
- 03指导多语句原子事务
- 04涵盖预处理与原始执行
- 05规定 FiveM 服务端设置
适用场景
- 01在 FiveM 资源中编写数据库查询
- 02迁移 mysql-async 数据库代码
- 03实现原子化多语句写入
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ germanfndez/ fiveai-skills --skill oxmysql安装后在 Claude Code 中输入/oxmysql确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
rules/insert.mdplaceholders.mdprepare.mdquery.mdrawExecute.mdscalar.mdsingle.mdtransaction.mdupdate.md详细介绍
oxmysql
通过 MySQL 表在 FiveM 中进行服务端 MySQL/MariaDB 访问(替代 mysql-async 和 ghmattimysql)。
激活条件
当用户在 FiveM 资源中编写或修改数据库代码时加载此技能:SELECT/INSERT/UPDATE/DELETE、upsert、事务、MySQL.*、exports.oxmysql,或从 mysql-async 迁移。
硬性规则
- 仅限服务端。在
fxmanifest.lua中,其他服务端脚本之前添加server_script '@oxmysql/lib/MySQL.lua'。 MySQL.Sync.*和MySQL.Async.*(mysql-async 兼容层)不可用。请替换为MySQL.query、MySQL.scalar、MySQL.single、MySQL.insert、MySQL.update、MySQL.prepare、MySQL.transaction,每个函数都有.await变体。@named占位符已弃用:请使用带值数组的位置占位符?。prepare仅接受?(以及用于列名的??)。- 切勿将用户输入拼接到 SQL 中;所有值都必须通过占位符传入。
- 每个函数都接受
(query, params, callback);使用.await挂起执行,而不是嵌套回调。 - 当多个写入操作必须同时成功或失败时,使用
transaction;任何操作失败都会回滚。 - 仅当
query/prepare规范化后的结果格式不满足需求时,才使用rawExecute。 - 为保证兼容性,优先使用 MariaDB 而非 MySQL 8。
决策指南
| 需求 | 调用 | 返回值 |
|---|---|---|
| 多行 | MySQL.query.await(sql, params) | 行数组 |
| 单行 | MySQL.single.await(sql, params) | 行或 nil |
| 单个值(COUNT、单列) | MySQL.scalar.await(sql, params) | 值或 nil |
| 插入 | MySQL.insert.await(sql, params) | 插入 ID |
| 更新 / 删除计数 | MySQL.update.await(sql, params) | 受影响的行数 |
| 热路径、重复执行的语句 | MySQL.prepare.await(sql, params) | 行 / 值 |
| 多条语句原子执行 | MySQL.transaction.await({ { query, values }, ... }) | 成功布尔值 |
| 原始、未规范化的结果 | MySQL.rawExecute.await(sql, params) | 原始结果 |
执行步骤
- 确认清单文件中有对应行,并且
oxmysql在该资源之前启动。 - 根据决策指南中的结果格式选择函数。
- 使用反引号括起标识符,并为每个值使用
?编写 SQL。 - 将多条语句的写入操作放入
transaction中。 - 使用前处理 nil 结果(
single、scalar)。
输出约定
返回可运行的服务端 Lua(或 JS),使用 MySQL.<fn>.await 和位置占位符,不使用 mysql-async 语法。
参考资料
- rules/placeholders.md —
?占位符、已弃用的@named。 - rules/query.md — MySQL.query:行或 insertId/affectedRows。
- rules/single.md — MySQL.single:单行或 nil。
- rules/scalar.md — MySQL.scalar:单个值。
- rules/insert.md — MySQL.insert:返回插入 ID。
- rules/update.md — MySQL.update:返回受影响的行数。
- rules/prepare.md — MySQL.prepare:预处理语句。
- rules/transaction.md — MySQL.transaction:原子执行多条查询。
- rules/rawExecute.md — MySQL.rawExecute:原始结果。
评论
支持 Markdown