oxmysql para FiveM: o que é, erros comuns e a skill de IA
Não quer gerenciar as skills por conta própria? Obtenha o app completo.
oxmysql é a biblioteca de banco de dados para FiveM que substituiu o mysql-async e o ghmattimysql. Roda apenas no servidor, conversa com MySQL ou MariaDB e expõe uma API Lua pequena no global MySQL. Se o seu recurso guarda qualquer coisa (dados de jogador, veículos, inventários, logs), esta é a camada contra a qual você escreve. O SKILL.md recomenda MariaDB em vez de MySQL 8 por compatibilidade.
O que o oxmysql oferece
O setup é uma linha no fxmanifest.lua, colocada antes dos outros scripts de servidor: server_script '@oxmysql/lib/MySQL.lua'. A partir daí, a tabela MySQL fica disponível em todos os scripts de servidor do recurso.
MySQL.queryeMySQL.query.await: executam qualquer instrução. Um SELECT retorna linhas; as demais retornaminsertIdouaffectedRows.MySQL.insert: insere uma linha e retorna o novo insert id.MySQL.update: atualiza linhas e retorna o número de linhas afetadas.MySQL.single: uma linha ounil, a chamada certa para “carregue este jogador”.MySQL.scalar: um valor de uma linha e uma coluna, para contagens e saldos.MySQL.prepare: instruções preparadas apenas com placeholders?, mais rápidas quando você repete a mesma consulta muitas vezes.MySQL.rawExecute: execução crua sem formato de resultado automático.MySQL.transaction: várias consultas que são aplicadas ou falham juntas.
Todas as funções recebem parâmetros por placeholders ?. Os valores nunca entram na string SQL. A referência está em coxdocs.dev/oxmysql.
Erros comuns com oxmysql
- Usar a API do mysql-async.
MySQL.Sync.fetchAlleMySQL.Async.executevêm de uma biblioteca que não é mais mantida. Em código novo, falham ou dependem de uma camada de compatibilidade que você não controla. UseMySQL.query.await,MySQL.inserte o resto da API do oxmysql. - Chamar MySQL de um script de cliente. A biblioteca é só de servidor. O cliente não tem acesso ao banco nem ao global
MySQL. Coloque a consulta em um script de servidor e entregue o resultado ao cliente por evento ou callback. - Concatenar valores no SQL.
'SELECT * FROM users WHERE identifier = "' .. identifier .. '"'é uma injeção esperando para acontecer. EscrevaMySQL.single.await('SELECT * FROM users WHERE identifier = ?', { identifier }). - Esperar uma consulta por linha dentro de um loop. Salvar 300 veículos com
MySQL.update.awaitdentro de umforsão 300 idas ao banco. Agrupe o trabalho em uma única instrução quando puder, ou envolva o conjunto emMySQL.transaction. - Esquecer a linha da lib no manifest. O sintoma é “attempt to index a nil value (global ‘MySQL’)” na primeira consulta. Adicione
server_script '@oxmysql/lib/MySQL.lua'antes dos outros scripts de servidor.
Por que assistentes de IA erram com oxmysql
Assistentes genéricos leram uma década de scripts FiveM, e a maioria usa mysql-async. Peça “salvar o dinheiro do jogador” e você recebe MySQL.Async.execute com o valor concatenado na string, às vezes dentro de um arquivo de cliente. Não roda em lugar nenhum, ou pior, roda e deixa o servidor aberto a injeções.
A skill do oxmysql dá ao assistente um arquivo de regras por função: placeholders.md, query.md, insert.md, prepare.md, update.md, single.md, scalar.md, rawExecute.md e transaction.md. Cada um indica o que a função retorna e como os parâmetros são passados. O assistente lê a regra que corresponde ao seu pedido e escreve código que usa a API real do lado certo da rede.
Instale a skill do oxmysql em 30 segundos
- Clique em “Download SKILL.md” no topo desta página.
- Descompacte na pasta de skills ou rules da sua ferramenta de IA. A seção de instalação abaixo mostra o caminho exato para Claude Code, Cursor e VS Code.
- Peça ao assistente algo concreto, como “carregue o saldo bancário de um jogador pelo identifier”, e confira se ele usa
MySQL.scalar.awaitcom um placeholder?em um script de servidor.
Como instalar esta skill
Baixe o zip, descompacte e coloque a pasta onde a sua ferramenta carrega skills ou regras. O caminho exato depende da ferramenta:
Claude Code
Descompacte em .claude/skills/oxmysql/ dentro do projeto (a pasta precisa conter SKILL.md). Para todos os projetos, use ~/.claude/skills/oxmysql/.
Cursor
O Cursor carrega as regras do projeto de .cursor/rules/. Adicione ali um arquivo de regra apontando para a skill descompactada, ou cole o conteúdo do SKILL.md e dos arquivos de regras em uma regra. O formato é .mdc com frontmatter e muda entre versões, então confira a documentação da sua versão.
VS Code / Copilot
O Copilot lê arquivos de instruções em .github/instructions/*.instructions.md. Copie o SKILL.md para lá com um glob applyTo para os seus arquivos Lua e mantenha os arquivos de regras ao lado.
O arquivo SKILL.md
Este é o arquivo que o seu assistente de IA lê. Ele aponta para os arquivos de regras incluídos no download.
O conteúdo da skill está em inglês: é documentação técnica feita para agentes de IA.
oxmysql
Server-side MySQL/MariaDB access for FiveM through the MySQL table (replacement for mysql-async and ghmattimysql).
Activation Contract
Load this skill when the user writes or edits database code in a FiveM resource: SELECT/INSERT/UPDATE/DELETE, upserts, transactions, MySQL.*, exports.oxmysql, or migrating from mysql-async.
Hard Rules
- Server only. Add
server_script '@oxmysql/lib/MySQL.lua'tofxmanifest.luaabove other server scripts. MySQL.Sync.*andMySQL.Async.*(mysql-async compatibility layer) are NOT available. Replace them withMySQL.query,MySQL.scalar,MySQL.single,MySQL.insert,MySQL.update,MySQL.prepare,MySQL.transaction, each with a.awaitvariant.@namedplaceholders are deprecated: use positional?with an array of values.prepareaccepts only?(and??for column names).- Never concatenate user input into SQL; every value goes through a placeholder.
- Every function takes
(query, params, callback); use.awaitto yield instead of nesting callbacks. - Use
transactionwhen several writes must succeed or fail together; it rolls back on any failure. - Use
rawExecuteonly when the normalized result shape ofquery/prepareis insufficient. - Prefer MariaDB over MySQL 8 for compatibility.
Decision Gates
| Need | Call | Returns |
|---|---|---|
| Many rows | MySQL.query.await(sql, params) |
array of rows |
| One row | MySQL.single.await(sql, params) |
row or nil |
| One value (COUNT, one column) | MySQL.scalar.await(sql, params) |
value or nil |
| Insert | MySQL.insert.await(sql, params) |
insert id |
| Update / delete count | MySQL.update.await(sql, params) |
affected rows |
| Hot path, repeated statement | MySQL.prepare.await(sql, params) |
rows / value |
| Several statements atomically | MySQL.transaction.await({ { query, values }, ... }) |
success boolean |
| Raw, unnormalized result | MySQL.rawExecute.await(sql, params) |
raw result |
Execution Steps
- Confirm the manifest line and that
oxmysqlstarts before the resource. - Pick the function by result shape from Decision Gates.
- Write the SQL with backticked identifiers and
?for every value. - Wrap multi-statement writes in
transaction. - Handle nil results (
single,scalar) before use.
Output Contract
Return runnable server-side Lua (or JS) using MySQL.<fn>.await with positional placeholders and no mysql-async syntax.
References
- rules/placeholders.md —
?placeholders, deprecated@named. - rules/query.md — MySQL.query: rows or insertId/affectedRows.
- rules/single.md — MySQL.single: one row or nil.
- rules/scalar.md — MySQL.scalar: single value.
- rules/insert.md — MySQL.insert: returns insert id.
- rules/update.md — MySQL.update: returns affected rows.
- rules/prepare.md — MySQL.prepare: prepared statements.
- rules/transaction.md — MySQL.transaction: atomic multi-query.
- rules/rawExecute.md — MySQL.rawExecute: raw result.
Upstream docs: https://overextended.dev/oxmysql
Perguntas frequentes
- Sim. O oxmysql é open source, mantido pelas equipes Overextended e CommunityOx e publicado no GitHub. Você pode rodar em qualquer servidor sem custo.
- Sim. As builds atuais do ESX Legacy e do QBCore já vêm com oxmysql como camada de banco de dados, então qualquer script que você escreva para esses frameworks pode usar MySQL.query, MySQL.insert e o resto da API.
- Sim, com um passo manual. O SKILL.md é markdown puro, então você pode colar na conversa como contexto. O suporte nativo a skills é para Claude Code, Cursor e VS Code.
O oxmysql é gratuito?
O oxmysql funciona com ESX e QBCore?
Posso usar esta skill com o ChatGPT?
Guias relacionados
Leituras mais longas do blog da FiveAI sobre o mesmo tema.