(PHP 5, PHP 7, PHP 8)
mysqli::prepare -- mysqli_prepare — Prepara una sentencia SQL para su ejecución
Estilo orientado a objetos
Estilo por procedimientos
Prepara la consulta SQL y devuelve un manejador de sentencia para ser utilizado por operaciones adicionales sobre la sentencia. La consulta debe constar de una única sentencia SQL.
Los marcadores de parámetros deben estar ligados a variables de aplicación utilizando mysqli_stmt_bind_param() y/o mysqli_stmt_bind_result() antes de ejecutar la sentencia u obtener las filas.
link
Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()
query
La consulta, como un string.
Nota:
No se debe agregar un punto y coma o
\g
a la sentencia.
Este parámetro puede incluir uno o más marcadores de parámetros en la sentencia SQL mediante la incorporación de caracteres de signo de interrogación (?
) en las posiciones correctas.
Nota:
Los marcadores son legales solo en ciertos lugares en las sentencias SQL. Por ejemplo, se les permite en la lista
VALUES()
de una sentenciaINSERT
(para especificar valores de columna para una fila), o en una comparación con una columna en una cláusulaWHERE
para especificar un valor de comparación.Sin embargo, no se les permite para identificadores (como nombres de tabla o columna), en la lista de selección que nombra las columnas que se devuelven mediante una sentencia
SELECT
, o para especificar ambos operandos de un operador binario como el signo de igualdad=
. Esta última restricción es necesaria debido a que sería imposible determinar el tipo de parámetro. Tampoco está permitido comparar un marcador conNULL
mediante? IS NULL
. En general, los parámetros son legales solamente en sentencias del Lenguaje de Manipulación de Datos (DML) y no en sentencias del Lenguaje de Definición de Datos (DDL).
mysqli_prepare() devuelve un objeto de sentencia o false
si ocurre un error.
Ejemplo #1 Ejemplo de mysqli::prepare()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
$stmt->close();
}
$mysqli->close();
?>
Estilo por procedimientos
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {
mysqli_stmt_bind_param($stmt, "s", $city);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $district);
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
mysqli_stmt_close($stmt);
}
mysqli_close($link);
?>
El resultado de los ejemplos sería:
Amersfoort is in district Utrecht