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
-- fxmanifest.lua
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server.lua',
}fxmanifest.lua
Las 4 funciones que más usarás
-- 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/3Quieres leer VARIAS filas de una tabla. ¿Qué función de oxmysql usas?
Lee TODAS las filas de la tabla player_vehicles que pertenecen a un citizenid, de forma parametrizada.
local citizenid = Player.PlayerData.citizenidlocal filas = MySQL.('SELECT * FROM player_vehicles WHERE citizenid = ?', { citizenid })Pista
Varias filas → query. El .await espera la respuesta antes de seguir.
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:
local 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:
