Requêtes multiples MySQL avec PHP
En PHP, exécuter plusieurs requêtes MySQL dans une seule requête peut être difficile. Cet article traite d'une situation courante dans laquelle plusieurs requêtes interdépendantes doivent être combinées pour un traitement efficace.
L'approche initiale consistait à créer des vues individuelles à l'aide des requêtes fournies. Cependant, cela entraînait des erreurs ou des jeux de résultats vides. Pour résoudre ce problème, PHP propose la fonction mysqli_multi_query(), qui permet l'exécution de requêtes concaténées.
Voici un exemple d'extrait de code :
/* Create database connection */ $link = mysqli_connect("server", "user", "password", "database"); $query = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X;"; $query .= "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH);"; $query .= "CREATE VIEW final_output AS SELECT current_rankings.player, current_rankings.rank as current_rank LEFT JOIN previous_rankings.rank as prev_rank ON (current_rankings.player = previous_rankings.player);"; $query .= "SELECT *, @rank_change = prev_rank - current_rank as rank_change from final_output;"; /* Execute multiple queries using mysqli_multi_query() */ if (mysqli_multi_query($link, $query)) { do { /* Store current result set */ if ($result = mysqli_store_result($link)) { while ($row = mysqli_fetch_array($result)) { echo $row['player']. $row['current_rank']. $row['prev_rank']. $row['rank_change']; } mysqli_free_result($result); } } while (mysqli_next_result($link)); }
Cette approche combine toutes les requêtes dans un chaîne unique et les exécute simultanément. La fonction mysqli_multi_query() renvoie TRUE en cas d'exécution réussie.
Si le plan d'exécution nécessite des requêtes supplémentaires, elles peuvent être ajoutées à la chaîne $query avec des points-virgules (;) comme séparateurs. Chaque ensemble de résultats peut être stocké dans une variable distincte à l'aide de mysqli_store_result() et récupéré à l'aide de mysqli_fetch_array() dans une boucle.
Vous pouvez également exécuter des requêtes séparément à l'aide de la fonction mysqli_query() :
$query1 = "Create temporary table A select c1 from t1"; $result1 = mysqli_query($link, $query1) or die(mysqli_error()); $query2 = "select c1 from A"; $result2 = mysqli_query($link, $query2) or die(mysqli_error()); while($row = mysqli_fetch_array($result2)) { echo $row['c1']; }
Cette approche permet un meilleur contrôle sur l'exécution des requêtes et la gestion des résultats.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!