Base de datos con oxmysql · Lección 1/3 · 9 min

oxmysql: leer y escribir en la base de datos

oxmysql es el puente entre tu script y MySQL. Con cuatro funciones cubres casi todo.

Casi todo lo que persiste en tu servidor (dinero, vehículos, casas, inventario) vive en MySQL. QBCore usa oxmysql por debajo, así que tú lo usas igual desde tus recursos.

Cárgalo en tu recurso

lua
-- fxmanifest.lua
server_scripts {
  '@oxmysql/lib/MySQL.lua',
  'server.lua',
}

fxmanifest.lua

Las 4 funciones que más usarás

lua
-- Leer varias filas
local filas = MySQL.query.await('SELECT * FROM player_vehicles WHERE citizenid = ?', { cid })

-- Leer UNA fila (o nil)
local casa = MySQL.single.await('SELECT * FROM houses WHERE id = ?', { id })

-- Insertar (devuelve el id nuevo)
local nuevoId = MySQL.insert.await('INSERT INTO logs (texto) VALUES (?)', { 'hola' })

-- Actualizar/borrar (devuelve filas afectadas)
local cambiadas = MySQL.update.await('UPDATE players SET money = ? WHERE citizenid = ?', { json.encode(money), cid })

CRUD con oxmysql

El .await hace que la consulta sea «síncrona» dentro de tu función: la respuesta llega antes de seguir. En QBCore la tabla principal de jugadores es 'players' y la clave es citizenid (no el source).

Practica lo aprendido

0/3
Test

Quieres leer VARIAS filas de una tabla. ¿Qué función de oxmysql usas?

Rellena los huecos

Lee TODAS las filas de la tabla player_vehicles que pertenecen a un citizenid, de forma parametrizada.

1local citizenid = Player.PlayerData.citizenid
2local filas = MySQL.('SELECT * FROM player_vehicles WHERE citizenid = ?', { citizenid })
Pista

Varias filas → query. El .await espera la respuesta antes de seguir.

Corrige el error

Aquí se quiere leer UNA sola fila (la casa con ese id), pero query.await devuelve una lista. Cámbialo a la función correcta para una fila.

Este código tiene un fallo:

1local casa = MySQL.query.await('SELECT * FROM houses WHERE id = ?', { id })

Reescríbelo corregido:

Pista

Para una única fila (o nil) existe MySQL.single.await, así no tienes que hacer filas[1].

Reto: prográmalo tú

Lee cuántos vehículos tiene un jugador en la tabla player_vehicles filtrando por su citizenid.

Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.

Ver pista

MySQL.query.await('SELECT * FROM player_vehicles WHERE citizenid = ?', { cid }) y cuenta #filas.

Escribe aquí tu solución:

¿Qué tal esta lección?