# dbQuery (Servidor)

> Envía una consulta SQL cuya respuesta se lee después con `dbPoll`.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Función Lua
- **Lado**: Servidor
- **Categoría**: Base de datos
- **URL**: https://wiki.mymp.gg/es/dbQuery

## Sintaxis

```lua
any dbQuery(element connection, string sql, any ... [, function callback = nil])
```

## Parámetros

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `callback` | `function` | Si se da, se llama con el identificador de la consulta cuando llega la respuesta; llama a `dbPoll(query, 0)` dentro de ella. *(por defecto: `nil`)* |
| `connection` | `element` | Una conexión de `dbConnect`. |
| `sql` | `string` | La sentencia SQL, con `?` y `??` como marcadores. |
| `...` | `any` | Los valores de los marcadores: textos, números, booleanos o `nil`. |

## Retorno

Un identificador de la consulta para `dbPoll` y `dbFree`. Sin `callback`, dentro de una corrutina, espera la respuesta y devuelve lo mismo que `dbPoll`.

### Marcadores y ciclo de vida

- `?` recibe el siguiente valor, ya escapado: `nil` pasa a `NULL`, los booleanos a `1` o `0` y los textos van entre comillas.
- `??` recibe un texto como identificador escapado de tabla o columna.
- El número de valores debe coincidir con el de marcadores.
- Un identificador sin `callback` que ya nada referencia lo libera automáticamente el recolector de basura.

## Ejemplo

```lua
dbQuery(function(query)
    local rows = dbPoll(query, 0)
    if rows then
        print(#rows .. " jugadores guardados")
    end
end, db, "SELECT * FROM players WHERE money > ?", 100)
```

## Ver también

- [dbPoll (Servidor)](https://wiki.mymp.gg/es/dbPoll.md): Lee la respuesta de una consulta de dbQuery, esperándola si hace falta.
- [dbFree (Servidor)](https://wiki.mymp.gg/es/dbFree.md): Descarta una consulta de dbQuery cuya respuesta no se va a leer.
- [dbExec (Servidor)](https://wiki.mymp.gg/es/dbExec.md): Ejecuta una sentencia SQL sin esperar respuesta.
