(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 procedimental
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:
mysqlnden Linux devuelve un código de error 1153. El mensaje de error serágot a packet bigger than.max_allowed_packetbytes
mysqlnden Windows devuelve un código de error 2006. El mensaje será del tiposerver has gone away.
libmysqlclienten cualquier plataforma devuelve el código de error 2006. El mensaje será del tiposerver has gone away.
statementSolo estilo procedimental: Un objeto mysqli_stmt devuelto por mysqli_stmt_init().
queryLa 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áusulaWHEREpara especificar un valor de comparación. Sin embargo, no están permitidos para los identificadores (de tablas o columnas).
Si el informe de errores de mysqli está habilitado (MYSQLI_REPORT_ERROR) y la operación solicitada falla,
se genera una advertencia. Si, además, el modo está configurado como MYSQLI_REPORT_STRICT,
se lanza una mysqli_sql_exception en su lugar.
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 procedimental
<?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);Los ejemplos anteriores mostrarán :
Amersfoort is in district Utrecht