mysqli::query
mysqli_query
(PHP 5, PHP 7, PHP 8)
mysqli::query -- mysqli_query — Ejecuta una consulta en la base de datos
Descripción
Estilo orientado a objetos
Advertencia
Advertencia de seguridad: Inyección SQL
Si la consulta contiene alguna entrada de variable,
entonces se deben usar sentencias preparadas
parametrizadas en su lugar. Alternativamente, los datos deben estar correctamente formateados y todas las cadenas deben ser escapadas usando
la función mysqli_real_escape_string().
Para consultas no-DML (que no son un INSERT, un UPDATE o un DELETE),
esta función es similar a llamar a
mysqli_real_query() seguida de
mysqli_use_result() o
mysqli_store_result().
Nota:
Si se pasa una consulta a
mysqli_query() 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 la 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
-
mysql - Solo estilo procedimental: Un objeto mysqli
devuelto por mysqli_connect() o mysqli_init()
query
-
La consulta, en forma de string.
result_mode
-
El modo de resultado puede ser una de las 3 constantes que indican cómo
el resultado será devuelto por el servidor MySQL.
MYSQLI_STORE_RESULT (por omisión) - devuelve un objeto mysqli_result
con un conjunto de resultados almacenados en búfer.
MYSQLI_USE_RESULT - devuelve un objeto mysqli_result
con un conjunto de resultados no almacenados en búfer.
Mientras haya registros pendientes de ser recuperados, la línea de conexión estará ocupada
y todas las llamadas siguientes devolverán el error Commands out of sync.
Para evitar el error, todos los registros deben ser recuperados del servidor o el conjunto
de resultados debe ser descartado llamando a la mysqli_free_result().
MYSQLI_ASYNC (disponible con mysqlnd) - la consulta se ejecuta
de manera asíncrona y ningún conjunto de resultados es devuelto inmediatamente.
mysqli_poll() se utiliza entonces para obtener los resultados de tales consultas.
Utilizada en combinación con la constante
MYSQLI_STORE_RESULT o MYSQLI_USE_RESULT.
Valores devueltos
Devuelve false en caso de fallo. Para consultas exitosas que producen
un conjunto de resultados como SELECT, SHOW, DESCRIBE o
EXPLAIN, mysqli_query() devolverá un
objeto mysqli_result. Para otros tipos de
consultas exitosas, mysqli_query() devolverá true.
Ejemplos
Ejemplo #1 Ejemplo con mysqli::query()
Estilo orientado a objetos
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* "Create table" no devolverá ningún conjunto de resultados */
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
printf("Tabla myCity creada con éxito.\n");
/* Consulta "Select" devuelve un conjunto de resultados */
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
printf("Select ha devuelto %d líneas.\n", $result->num_rows);
/* Si tenemos que recuperar muchos datos, utilizamos MYSQLI_USE_RESULT */
$result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
/* Tenga en cuenta que no podemos ejecutar ninguna función que actúe en el servidor mientras
el conjunto de resultados no esté cerrado. Todas las llamadas devolverán un 'out of sync' */
$mysqli->query("SET @a:='this will not work'");
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* "Create table" no devolverá ningún conjunto de resultados */
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
printf("Tabla myCity creada con éxito.\n");
/* Consulta "Select" devuelve un conjunto de resultados */
$result = mysqli_query($link, "SELECT Name FROM City LIMIT 10");
printf("Select ha devuelto %d líneas.\n", mysqli_num_rows($result));
/* Si tenemos que recuperar muchos datos, utilizamos MYSQLI_USE_RESULT */
$result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT);
/* Tenga en cuenta que no podemos ejecutar ninguna función que actúe en el servidor mientras
el conjunto de resultados no esté cerrado. Todas las llamadas devolverán un 'out of sync' */
mysqli_query($link, "SET @a:='this will not work'");
Los ejemplos anteriores mostrarán:
Tabla myCity creada con éxito.
Select ha devuelto 10 líneas.
Fatal error: Uncaught mysqli_sql_exception: Commands out of sync; you can't run this command now in...