(PHP 5, PHP 7, PHP 8)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Prepara una consulta SQL para su ejecución
Estilo orientado a objetos
Estilo por procedimientos
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 tiposerver has gone away.
libmysqlclient
en cualquier plataforma devuelve el código de error 2006. El mensaje será del tiposerver has gone away.
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 consultaINSERT
(para especificar los valores de las columnas para una fila), o en una comparación de una cláusulaWHERE
para especificar un valor de comparación. Sin embargo, no están permitidos para los identificadores (de tablas o columnas).
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.
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