mysqli_stmt::prepare

mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_preparePrepara uma declaração SQL para execução

Descrição

Estilo orientado a objetos

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

Estilo procedural

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.

Note:

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.

Note:

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

Example #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