Prepara uma declaração SQL para execução

# mysqli_stmt::prepare

# mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_prepare — Prepara uma declaração SQL para execução

### Descrição

Estilo orientado a objetos

public function mysqli_stmt::prepare(string `$query`): bool

Estilo procedural

function mysqli_stmt_prepare(mysqli_stmt `$statement`, string `$query`): bool

Prepara uma declaração para execução. A consulta deve consistir de uma única declaração SQL.

O modelo de declaração pode conter zero ou mais marcadores de parâmetro que são os pontos de interrogação (`?`), também chamados de espaços reservados. Os marcadores de parâmetros devem ser ligados às variáveis da aplicação usando mysqli_stmt_bind_param() antes da execução da declaração.

> Nota:

> No caso de uma declaração passada a mysqli_stmt_prepare() ser mais longa que o parâmetro `max_allowed_packet` do servidor, os códigos de erro retornados serão diferentes dependendo se está sendo utilizando o driver nativo MySQL (`mysqlnd`) ou a biblioteca cliente do MySQL (`libmysqlclient`). O comportamento é o seguinte:

> - `mysqlnd` no Linux retorna o código de erro 1153. A mensagem de erro diz got a packet bigger than (recebido pacote maior que) `max_allowed_packet` bytes.

> - `mysqlnd` no Windos retorna o código de erro 2006. Esta mensagem de erro diz server has gone away (servidor se foi).

> - `libmysqlclient` em todas as plataformas a retorna o código de erro 2006. Esta mensagem de erro diz server has gone away (servidor se foi).

### Parâmetros

`statement`
  Somente no estilo procedural: Um objeto mysqli_stmt retornado por mysqli_stmt_init().
`query`

  A consulta, como uma string. Deve consistir de uma única declaração SQL.

  A declaração SQL pode conter zero ou mais marcadores de parâmetros representados por caracteres de ponto de interrogação (`?`) nas posições apropriadas.

  > Nota:

  > Os marcadores são permitidos somente em alguns lugares das declarações SQL. Por exemplo, eles são permitidos na lista `VALUES()` de Uma declaração `INSERT` (para especificar valores de colunas para uma linha), ou em uma comparação com uma coluna em uma cláusula `WHERE` para especificar um valor de comparação. Entretanto, não são permitidos para identificadores (como tabelas ou nomes de colunas).

### Valor Retornado

Retorna `true` em caso de sucesso ou `false` em caso de falha.

### Erros/Exceções

Se o relatório de erros da extensão mysqli estiver habilitado (`MYSQLI_REPORT_ERROR`) e a operação solicitada falhar, um aviso será gerado. Se, além disso, o modo for definido como `MYSQLI_REPORT_STRICT`, uma exceção mysqli_sql_exception será lançada em vez do aviso.

### Exemplos

Exemplo #1 Exemplo de mysqli_stmt::prepare()

Estilo orientado a objetos

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");

    $city = "Amersfoort";

    /* cria uma declaração preparada */
    $stmt = $mysqli->stmt_init();
    $stmt->prepare("SELECT District FROM City WHERE Name=?");

    /* liga parâmetros para os marcadores */
    $stmt->bind_param("s", $city);

    /* executa a consulta */
    $stmt->execute();

    /* liga o resultado à variável */
    $stmt->bind_result($district);

    /* obtém o valor */
    $stmt->fetch();

    printf("%s está no distrito %s\n", $city, $district);

Estilo procedural

    <?php

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect("localhost", "my_user", "my_password", "world");

    $city = "Amersfoort";

    /* cria uma declaração preparada */
    $stmt = mysqli_stmt_init($link);
    mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");

    /* liga parâmetros para os marcadores */
    mysqli_stmt_bind_param($stmt, "s", $city);

    /* executa a consulta */
    mysqli_stmt_execute($stmt);

    /* liga o resultado à variável */
    mysqli_stmt_bind_result($stmt, $district);

    /* obtém o valor */
    mysqli_stmt_fetch($stmt);

    printf("%s está no distrito %s\n", $city, $district);

Os exemplos acima produzirão:

    Amersfoort está no distrito Utrecht

### Veja Também

- mysqli_stmt_init() - Inicializa uma instrução e retorna um objeto para uso com mysqli_stmt_prepare
- mysqli_stmt_execute() - Executa uma instrução preparada
- mysqli_stmt_fetch() - Recebe resultados de uma instrução preparada nas variáveis vinculadas
- mysqli_stmt_bind_param() - Liga variáveis a uma declaração preparada como parâmetros
- mysqli_stmt_bind_result() - Liga variáveis a uma declaração preparada para armazenamento de resultado
- mysqli_stmt_get_result() - Obtém um resultado de uma instrução preparada como um objeto mysqli_result
- mysqli_stmt_close() - Fecha uma instrução preparada

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open