mysqli::multi_query
mysqli_multi_query
(PHP 5, PHP 7, PHP 8)
mysqli::multi_query -- mysqli_multi_query â ExĂ©cute une ou plusieurs requĂȘtes sur la base de donnĂ©es
Description
Style orienté objet
public function mysqli::multi_query(
string $query):
bool
Avertissement
Avertissement de Sécurité : injection SQL
Si la requĂȘte contiens des variables d'entrĂ©es alors des
déclarations préparées paramétrisées
devrait ĂȘtre utilisĂ© Ă la place. Alternativement, les donnĂ©es doivent ĂȘtre correctement
formatĂ©es et toutes les chaĂźnes de caractĂšres doivent ĂȘtre Ă©chappĂ©es en utilisant la fonction
mysqli_real_escape_string().
Les requĂȘtes sont envoyĂ©es en un seul appel Ă la base de donnĂ©es et traitĂ©es sĂ©quentiellement.
mysqli_multi_query() attend que la premiĂšre requĂȘte
soit terminée avant de rendre le contrÎle à PHP. Entre-temps, le serveur MySQL
continue de traiter les requĂȘtes restantes de maniĂšre asynchrone par rapport Ă PHP
et rend les résultats disponibles pour la récupération.
Il est recommandé d'utiliser une
do-while pour traiter
plusieurs requĂȘtes. La connexion sera occupĂ©e jusqu'Ă ce que toutes les
requĂȘtes soient complĂ©tĂ©es et que leur rĂ©sultat soit rĂ©cupĂ©rĂ© par PHP.
Aucune autre requĂȘte ne peut ĂȘtre Ă©mise sur la mĂȘme connexion, jusqu'Ă ce
que toutes les requĂȘtes soient traitĂ©es.
Pour traiter la prochaine requĂȘte dans la suite, utiliser
mysqli_next_result(). Si le prochain résultat n'est pas
encore prĂȘt mysqli attendra pour la rĂ©ponse depuis le serveur MySQL.
Pour vérifier s'il y a plus de résultats, utiliser
mysqli_more_results().
Pour les requĂȘtes qui produisent un jeu de rĂ©sultat, tel que
SELECT, SHOW, DESCRIBE ou
EXPLAIN,
mysqli_use_result() ou mysqli_store_result()
peut ĂȘtre utilisĂ© pour rĂ©cupĂ©rer le jeu de rĂ©sultat. Pour les requĂȘtes qui
ne produisent pas de jeu de rĂ©sultat, les mĂȘmes fonctions peuvent ĂȘtre
utilisées pour récupérer les informations telles que le nombre de lignes affectées.
Astuce
ExĂ©cuter une requĂȘte CALL pour les procĂ©dures stockĂ©es
peut produire plusieurs jeux de résultats. Si la procédure stockée contient
des requĂȘtes SELECT, les jeux de rĂ©sultats sont retournĂ©s
dans l'ordre dans lequel ils sont produits par l'exécution de la procédure.
En général, l'appeleur ne peut pas savoir combien de jeux de résultats une
procĂ©dure retournera et doit ĂȘtre prĂ©parĂ© Ă rĂ©cupĂ©rer plusieurs rĂ©sultats.
Le résultat final de la procédure est un résultat de statut qui n'inclut
pas de jeu de résultat. Le statut indique si la procédure a succédé
ou si une erreur s'est produite.
Valeurs de retour
Retourne false uniquement si la premiĂšre requĂȘte Ă©choue. Pour rĂ©cupĂ©rer
les sous-sĂ©quences d'erreurs issues des autres requĂȘtes, il faut appeler
d'abord la fonction mysqli_next_result().
Exemples
Exemple #1 Exemple avec mysqli::multi_query()
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* ExĂ©cution d'une requĂȘte multiple */
$mysqli->multi_query($query);
do {
/* Stockage du jeu de résultats dans PHP */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
}
/* Affichage d'une séparation */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
?>
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* ExĂ©cution d'une requĂȘte multiple */
mysqli_multi_query($link, $query);
do {
/* Stockage du jeu de résultats dans PHP */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
}
/* Affichage d'une séparation */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
?>
Les exemples ci-dessus vont afficher quelque chose de similaire Ă :
my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer