PHP 8.4.1 Released!

mysqli::use_result

mysqli_use_result

(PHP 5, PHP 7, PHP 8)

mysqli::use_result -- mysqli_use_resultIniciar uma recuperação de conjunto de resultados

Descrição

Estilo orientado a objetos

public mysqli::use_result(): mysqli_result|false

Estilo procedural

mysqli_use_result(mysqli $mysql): mysqli_result|false

Usado para iniciar a recuperação de um conjunto de resultados da última consulta executada usando a função mysqli_real_query() na conexão com o banco de dados.

Esta ou a função mysqli_store_result() deve ser chamada antes que os resultados de uma consulta possam ser recuperados, e uma ou outra deve ser chamada para evitar que a próxima consulta nessa conexão com o banco de dados falhe.

Nota:

A função mysqli_use_result() não transfere todo o conjunto de resultados do banco de dados e, portanto, não pode ser usada funções como mysqli_data_seek() para mover para uma linha específica dentro do conjunto. Para usar esta funcionalidade, o conjunto de resultados deve ser armazenado usando mysqli_store_result(). Não se deve usar mysqli_use_result() se for feito muito processamento no lado do cliente, pois isso irá sobrecarregar o servidor e evitar que outras threads atualizem quaisquer tabelas das quais os dados estão sendo buscados.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna um objeto de resultado sem buffer ou false se ocorreu um erro.

Erros/Exceções

Se o relatório de erros da extensão mysqli estiver habilitado (MYSQLI_REPORT_ERROR) e a operação solicitada falhar, um aviso será gerado. Se, além disso, o modo for definido como MYSQLI_REPORT_STRICT, uma exceção mysqli_sql_exception será lançada em vez do aviso.

Exemplos

Exemplo #1 mysqli::use_result() exemplo

Estilo orientado a objetos

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

/* verifique a conexão */
if (mysqli_connect_errno()) {
printf("Falha na conexão: %s\n", mysqli_connect_error());
exit();
}

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

/* executar várias consultas */
if ($mysqli->multi_query($query)) {
do {
/* armazenar primeiro conjunto de resultados */
if ($result = $mysqli->use_result()) {
while (
$row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->close();
}
/* divisor de impressão */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while (
$mysqli->next_result());
}

/* fecha a conexão */
$mysqli->close();
?>

Estilo procedural

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

/* verifique a conexão */
if (mysqli_connect_errno()) {
printf("Falha na conexão: %s\n", mysqli_connect_error());
exit();
}

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

/* executar várias consultas */
if (mysqli_multi_query($link, $query)) {
do {
/* armazenar primeiro conjunto de resultados */
if ($result = mysqli_use_result($link)) {
while (
$row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* divisor de impressão */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (
mysqli_next_result($link));
}

/* fecha a conexão */
mysqli_close($link);
?>

Os exemplos acima produzirão:

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

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
4
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