ConFoo: Call for paper is now Open

mysqli::use_result

mysqli_use_result

(PHP 5)

mysqli::use_result -- mysqli_use_resultInitialise la récupération d'un jeu de résultats

Description

Style orienté objet

mysqli_result mysqli::use_result ( void )

Style procédural

mysqli_result mysqli_use_result ( mysqli $link )

Utilisé pour initialiser la récupération d'un jeu de résultats à partir de la dernière requête exécutée en utilisant la fonction mysqli_real_query() sur la connexion spécifiée par le paramètre link.

Cette fonction ou la fonction mysqli_store_result() doivent être appelées avant que le résultat d'une requête ne puisse être récupéré, et pour éviter l'échec de la prochaine requête sur la connexion à la base de données.

Note:

La fonction mysqli_use_result() ne transfère pas le jeu de résultats en entier à partir de la base de données et on ne peut donc pas utiliser des fonctions telle mysqli_data_seek() pour se déplacer entre les enregistrements. Pour utiliser cette fonctionnalité, vous devez récupérer le jeu de résultats en utilisant mysqli_store_result().

Valeurs de retour

Retourne un objet de résultats non stockés ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec mysqli::use_result()

Style orienté objet

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

/* Vérification de la connexion */
if (mysqli_connect_errno()) {
    
printf("Échec de la connexion : %s\n"mysqli_connect_error());
    exit();
}

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

/* Exécution de plusieurs requêtes */
if ($mysqli->multi_query($query)) {
    do {
        
/* Stockage du premier jeu de résultats */
        
if ($result $mysqli->use_result()) {
            while (
$row $result->fetch_row()) {
                
printf("%s\n"$row[0]);
            }
            
$result->close();
        }
        
/* Affichage d'une démarcation */
        
if ($mysqli->more_results()) {
            
printf("-----------------\n");
        }
    } while (
$mysqli->next_result());
}

/* Fermeture de la connexion */
$mysqli->close();
?>

Style procédural

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

/* Vérification de la connexion */
if (mysqli_connect_errno()) {
    
printf("Échec de la connexion : %s\n"mysqli_connect_error());
    exit();
}

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

/* Exécution de plusieurs requêtes */
if (mysqli_multi_query($link$query)) {
    do {
        
/* Stockage du premier jeu de résultats */
        
if ($result mysqli_use_result($link)) {
            while (
$row mysqli_fetch_row($result)) {
                
printf("%s\n"$row[0]);
            }
            
mysqli_free_result($result);
        }
        
/* Affichage d'une démarcation */
        
if (mysqli_more_results($link)) {
            
printf("-----------------\n");
        }
    } while (
mysqli_next_result($link));
}

/* Fermeture de la connexion */
mysqli_close($link);
?>

Les exemples ci-dessus vont afficher :

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

Voir aussi

add a note add a note

User Contributed Notes 1 note

up
1
Anonymous
2 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