MySQLi_STMT
PHP Manual

mysqli_stmt::prepare

mysqli_stmt_prepare

(PHP 5)

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

Descrição

Estilo orientado à objeto

mixed mysqli_stmt::prepare ( string $query )

Estilo orientado à objeto

bool mysqli_stmt_prepare ( mysqli_stmt $stmt , string $query )

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".

Parâmetros

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).

Valor Retornado

Retorna TRUE em caso de sucesso ou FALSE em caso de falha.

Exemplos

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á

Veja Também


MySQLi_STMT
PHP Manual