mysqli::use_result

mysqli_use_result

(PHP 5, PHP 7, PHP 8)

mysqli::use_result -- mysqli_use_resultInicializa la recuperación de un conjunto de resultados

Descripción

Estilo orientado a objetos

public mysqli::use_result(): mysqli_result|false

Estilo por procedimientos

mysqli_use_result(mysqli $mysql): mysqli_result|false

Se utiliza para inicializar la recuperación de un conjunto de resultados a partir de la última consulta ejecutada utilizando la función mysqli_real_query() en la conexión especificada por el parámetro link.

Esta función o la función mysqli_store_result() deben ser llamadas antes de que el resultado de una consulta pueda ser recuperado, y para evitar el fallo de la próxima consulta en la conexión a la base de datos.

Nota:

La función mysqli_use_result() no transfiere el conjunto de resultados completo desde la base de datos y por lo tanto no se pueden utilizar funciones como mysqli_data_seek() para moverse entre los registros. Para utilizar esta funcionalidad, se debe recuperar el conjunto de resultados utilizando mysqli_store_result().

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve un objeto de resultados no almacenados o false si ocurre un 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 con mysqli::use_result()

Estilo orientado a objetos

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

/* Verificación de la conexión */
if (mysqli_connect_errno()) {
printf("Fallo en la conexión: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* Ejecución de múltiples consultas */
if ($mysqli->multi_query($query)) {
do {
/* Almacenamiento del primer conjunto de resultados */
if ($result = $mysqli->use_result()) {
while (
$row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->close();
}
/* Visualización de una demarcación */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while (
$mysqli->next_result());
}

/* Cierre de la conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$link
= mysqli_connect("localhost", "my_user", "my_password", "world");

/* Verificación de la conexión */
if (mysqli_connect_errno()) {
printf("Fallo en la conexión: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* Ejecución de múltiples consultas */
if (mysqli_multi_query($link, $query)) {
do {
/* Almacenamiento del primer conjunto de resultados */
if ($result = mysqli_use_result($link)) {
while (
$row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* Visualización de una demarcación */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (
mysqli_next_result($link));
}

/* Cierre de la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer

Ver también

add a note

User Contributed Notes 1 note

up
3
Anonymous
12 years ago
> One should not use mysqli_use_result() if a lot of processing on the client side is performed, since this will tie up the server and prevent other threads from updating any tables from which the data is being fetched.

Another way of understanding the "blocking" behavior of this "use_result" method is that by using this method (or the MYSQLI_USE_RESULT flag on the "query" method), if attempting to run a second query of any kind - updates, inserts, selects, or other - while still working with these first results, the second query will fail. Checking mysqli->error, you should get a "Commands out of sync" error on the second query call.

However, if you use the "store_result" method (or the default MYSQLI_STORE_RESULT flag on the "query" method) instead, the second query will execute just fine.

Just to demonstrate this "blocking" behavior of this "use_result" method, the second query on line 7 below would otherwise fail if you instead used "use_result" on line 3:

<?php
$mysqli
->real_query('SELECT * FROM `test`');
$query = $mysqli->store_result();
while (
$row = $query->fetch_assoc()) {
$id = (int) $row['id'];
$query2 = $mysqli->query("UPDATE `test` SET `label` = md5(rand()) WHERE `id` = $id");
}
?>
To Top