mysqli_stmt::prepare

mysqli_stmt_prepare

(PHP 5, PHP 7)

mysqli_stmt::prepare -- mysqli_stmt_preparePreparar una sentencia SQL para su ejecución

Descripción

Estilo orientado a objetos

mysqli_stmt::prepare ( string $query ) : mixed

Estilo por procedimientos

mysqli_stmt_prepare ( mysqli_stmt $stmt , string $query ) : bool

Prepara una consulta the SQL apuntada por la consulta de cadena terminada en null.

Los marcadores de parámetros deben estar vinculados a las variables de la apliación usando mysqli_stmt_bind_param() y/o mysqli_stmt_bind_result() antes de ejecutar la sentencia u obtener filas.

Nota:

En el caso de que se pase una sentencia a mysqli_stmt_prepare() que sea más grande que max_allowed_packet del servidor, los códigos de error devueltos serán diferentes, dependiendo de si se usa el Controlador Nativo de MysQL (mysqlnd) o la biblioteca Cliente de MySQL (libmysqlclient). El comportamiento es como sigue:

  • mysqlnd en Linux devuelve un código de error 1153. El mensaje de error significa obtenido un paquete mas grande que max_allowed_packet bytes.

  • mysqlnd en Windows devuelve un código de error 2006. Este mensaje de error significa el servidor se ha ido.

  • libmysqlclient en todas las plataformas devuelve un código de error 2006. Este mensaje de error significa el servidor se ha ido.

Parámetros

stmt

Sólo estilo por procediminetos: Un identificador de declaraciones devuelto por mysqli_stmt_init().

query

La consulta, como una cadena. Debe consistir en una sentencia SQL única.

Se puede incluir uno o más marcadores de parámetros en la senetencia SQL embebiendo el carácter de signo de interrogación (?) en la posición apropiada.

Nota:

No se debería añadir un punto y coma terminal o \g a la sentencia.

Nota:

Los marcadores únicamente son legales en ciertos lugares de las sentencias SQL. Por ejemplo, están permitidos en la lista de VALUES() de una sentencia INSERT (para especificar los valores de las columnas de una fila), o en una comparación en una cláusula WHERE para especificar un valor de comparación.

Sin embargo, no están permitidos en identificadores (como nombres de tablas o columnas), en la lista de selección que nombra a las columnas a ser devueltas por una sentencia SELECT), o para especificar ambos operandos de un operador binario como signo igual =. La última restricción es necesaria debido a que sería imposible determinar el tipo de parámetro. En general, los parámetros son legales únicamente en sentencias de Lenguaje de Manipulación de Datos (DML), y no en sentencias de Lenguaje de Definición de Datos (DDL).

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli 
= new mysqli("localhost""my_usuario""mi_contraseña""world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

$ciudad "Amersfoort";

/* crear una sentencia preparada */
$sentencia =  $mysqli->stmt_init();
if (
$sentencia->prepare("SELECT District FROM City WHERE Name=?")) {

    
/* vincular los parámetros para los marcadores */
    
$sentencia->bind_param("s"$ciudad);

    
/* ejecutar la consulta */
    
$sentencia->execute();

    
/* vincular las variables de resultados */
    
$sentencia->bind_result($distrito);

    
/* obtener el valor */
    
$sentencia->fetch();

    
printf("%s está en el distrito de %s\n"$ciudad$distrito);

    
/* cerrar la sentencia */
    
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace 
mysqli_connect("localhost""my_usuario""mi_contraseña""world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

$ciudad "Amersfoort";

/* crear una sentencia preparada */
$sentencia mysqli_stmt_init($enlace);
if (
mysqli_stmt_prepare($sentencia'SELECT District FROM City WHERE Name=?')) {

    
/* vincular los parámetros para los marcadores */
    
mysqli_stmt_bind_param($sentencia"s"$ciudad);

    
/* ejecutar la consulta */
    
mysqli_stmt_execute($sentencia);

    
/* vincular las variables de resultados */
    
mysqli_stmt_bind_result($sentencia$distrito);

    
/* obtener el valor */
    
mysqli_stmt_fetch($sentencia);

    
printf("%s está en el distrito de %s\n"$ciudad$distrito);

    
/* cerrar la sentencia */
    
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Amersfoort está en el distrito de Utrecht

Ver también

Posicionamiento SEM en Teruel