mysqli_stmt::prepare

mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_preparePrepara una consulta SQL para su ejecución

Descripción

Estilo orientado a objetos

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

Estilo por procedimientos

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

Prepara la consulta SQL query, para la sesión de trabajo stmt.

Las variables SQL deben asociarse a una variable PHP mediante la función mysqli_stmt_bind_param() y/o mysqli_stmt_bind_result(), antes de ejecutar la consulta.

Nota:

Si se pasa una consulta a mysqli_stmt_prepare() que es más larga que max_allowed_packet, los códigos de error devueltos serán diferentes según si se utiliza MySQL Native Driver (mysqlnd) o MySQL Client Library (libmysqlclient). El comportamiento se define como sigue:

  • mysqlnd en Linux devuelve un código de error 1153. El mensaje de error será got a packet bigger than max_allowed_packet bytes.

  • mysqlnd en Windows devuelve un código de error 2006. El mensaje será del tipo server has gone away.

  • libmysqlclient en cualquier plataforma devuelve el código de error 2006. El mensaje será del tipo server has gone away.

Parámetros

stmt

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

query

La consulta, en forma de string. Debe consistir en un comando SQL válido y único.

Este argumento puede incluir una o más variables SQL, utilizando signos de interrogación (?) en los lugares adecuados.

Nota:

Los marcadores están permitidos únicamente en ciertos lugares de las consultas SQL. Por ejemplo, lo están en la lista VALUES() de una consulta INSERT (para especificar los valores de las columnas para una fila), o en una comparación de una cláusula WHERE para especificar un valor de comparación. Sin embargo, no están permitidos para los identificadores (de tablas o columnas).

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Errores/Excepciones

If mysqli error reporting is enabled (MYSQLI_REPORT_ERROR) and the requested operation fails, a warning is generated. If, in addition, the mode is set to MYSQLI_REPORT_STRICT, a mysqli_sql_exception is thrown instead.

Ejemplos

Ejemplo #1 Ejemplo para 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";

/* create a prepared statement */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");

/* bind parameters for markers */
$stmt->bind_param("s", $city);

/* execute query */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($district);

/* fetch value */
$stmt->fetch();

printf("%s is in district %s\n", $city, $district);

Estilo por procedimientos

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$city = "Amersfoort";

/* create a prepared statement */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");

/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);

/* execute query */
mysqli_stmt_execute($stmt);

/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);

/* fetch value */
mysqli_stmt_fetch($stmt);

printf("%s is in district %s\n", $city, $district);

El resultado de los ejemplos sería:

Amersfoort is in district Utrecht

Ver también