(PHP 5)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Prepara uma declaração SQL para execução
Estilo orientado à objeto
Estilo orientado à objeto
Prepares the SQL query pointed to by the null-terminated string query.
Os marcadores de parâmetros devem ser ligados as variáveis da aplicação utilizando-se mysqli_stmt_bind_param() e/ou mysqli_stmt_bind_result() antes de executar a declaração ou trazer os resultados.
Nota:
Se você passar uma instrução para mysqli_stmt_prepare() que é mais longa que o max_allowed_packet do servidor, os códigos de erro retornados são diferentes dependendo se você está utilizando o driver Nativo MySQL (mysqlnd) ou a biblioteca cliente do MySQL (libmysql). O comportamento é o seguinte:
No Linux o mysqlnd retorna o código de erro 1153. A mensagem de erro diz "got a packet bigger than max_allowed_packet bytes".
No Windows o mysqlnd retorna o código de erro 2006. Esta mensagem de erro diz "server has gone away".
Em todas as plataformas a libmysql retorna o código de erro 2006. Esta mensagem de erro diz "server has gone away".
stmt
Procedural style only: A statement identifier returned by mysqli_stmt_init().
query
A query, como uma string. Deve conter somente uma única declaração SQL.
Você pode incluir um ou mais marcadores de parâmetros na declaração SQL colocando a interrogação (?) nas posições apropriadas .
Nota:
Você não deve adicionar um ponto-e-virgula ou \g para terminar a declaração.
Nota:
Os marcadores são permitidos somente em alguns lugares das declarações SQL. Por exemplo, eles são permitidos na lista VALUES() de um INSERT (para especificar valores das colunas em uma linha), ou na comparação de uma coluna na cláusula WHERE para especificar um valor de comparação.
Entretanto, eles não são permitidos em identificadores (como nomes de tabela e coluna, na lista que nomeia os nomes das colunas a serem retornados por uma declaração SELECT), ou para especificar ambos os operandos de um operador binário como o = sinal de igual. A última restrição é necessária pois seria impossível determinar o tipo do parâmetro. No geral, os parâmetros são permitidos somente em declarações de Linguagem de Manipulação de Dados (no inglês DML), e não em Linguagem Definição de Dados (DDL).
Retorna TRUE
em caso de sucesso ou FALSE
em caso de falha.
Exemplo #1 Estilo orientado à objeto
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* verifica coenxão */
if (mysqli_connect_errno()) {
printf("Conexão falhou: %s\n", mysqli_connect_error());
exit();
}
$cidade = "Curitiba";
/* cria uma declaração preparada */
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT Estado FROM Cidade WHERE Nome=?")) {
/* atribui os parâmetros aos marcadores */
$stmt->bind_param("s", $cidade);
/* executa a query */
$stmt->execute();
/* atribui as variáveis de resultado */
$stmt->bind_result($estado);
/* busca o valor */
$stmt->fetch();
printf("%s está no estado %s\n", $cidade, $estado);
/* fecha a declaração */
$stmt->close();
}
/* fecha a conexão */
$mysqli->close();
?>
Exemplo #2 Estilo procedural
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* verifica coenxão */
if (mysqli_connect_errno()) {
printf("Conexão falhou: %s\n", mysqli_connect_error());
exit();
}
$cidade = "Curitiba";
/* cria uma declaração preparada */
$stmt = mysqli_stmt_init($link);
if (mysqli_stmt_prepare($stmt, 'SELECT Estado FROM Cidade WHERE Nome=?')) {
/* atribui os parâmetros aos marcadores */
mysqli_stmt_bind_param($stmt, "s", $cidade);
/* executa a query */
mysqli_stmt_execute($stmt);
/* atribui as variáveis de resultado */
mysqli_stmt_bind_result($stmt, $estado);
/* busca o valor */
mysqli_stmt_fetch($stmt);
printf("%s está no estado %s\n", $cidade, $estado);
/* fecha a declaração */
mysqli_stmt_close($stmt);
}
/* fecha a conexão */
mysqli_close($link);
?>
O exemplo acima irá imprimir:
Curitiba está no estado Paraná