# dbQuery (Servidor)

> Envia uma consulta SQL cuja resposta é lida depois com `dbPoll`.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Função Lua
- **Lado**: Servidor
- **Categoria**: Banco de dados
- **URL**: https://wiki.mymp.gg/pt/dbQuery

## Sintaxe

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

## Parâmetros

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `callback` | `function` | Se dada, é chamada com o identificador da consulta quando a resposta chega; chame `dbPoll(query, 0)` dentro dela. *(padrão: `nil`)* |
| `connection` | `element` | Uma conexão de `dbConnect`. |
| `sql` | `string` | O comando SQL, com `?` e `??` como marcadores. |
| `...` | `any` | Os valores dos marcadores: textos, números, booleanos ou `nil`. |

## Retorno

Um identificador da consulta para `dbPoll` e `dbFree`. Sem `callback`, dentro de uma corrotina, espera a resposta e devolve o mesmo que `dbPoll`.

### Marcadores e ciclo de vida

- `?` recebe o próximo valor, já escapado: `nil` vira `NULL`, booleanos viram `1` ou `0` e textos ficam entre aspas.
- `??` recebe um texto como identificador escapado de tabela ou coluna.
- O número de valores precisa ser igual ao de marcadores.
- Um identificador sem `callback` que ninguém mais referencia é liberado automaticamente pelo coletor de lixo.

## Exemplo

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

## Veja também

- [dbPoll (Servidor)](https://wiki.mymp.gg/pt/dbPoll.md): Lê a resposta de uma consulta de dbQuery, esperando por ela se preciso.
- [dbFree (Servidor)](https://wiki.mymp.gg/pt/dbFree.md): Descarta uma consulta de dbQuery cuja resposta não vai ser lida.
- [dbExec (Servidor)](https://wiki.mymp.gg/pt/dbExec.md): Executa um comando SQL sem esperar resposta.
