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
Estilo procedural
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 dizgot 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 dizserver has gone away(servidor se foi).
libmysqlclient
em todas as plataformas a retorna o código de erro 2006. Esta mensagem de erro dizserver 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çãoINSERT
(para especificar valores de colunas para uma linha), ou em uma comparação com uma coluna em uma cláusulaWHERE
para especificar um valor de comparação. Entretanto, não são permitidos para identificadores (como tabelas ou nomes de colunas).
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
- 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