Maison > Article > développement back-end > Comment exécuter plusieurs requêtes MySQL dans un seul script PHP ?
Lorsque vous travaillez avec MySQL en PHP, il peut être nécessaire d'exécuter plusieurs requêtes ensemble. Cela peut être utile pour créer des vues, des tables temporaires et manipuler des données en une seule transaction.
Considérez l'extrait de code suivant :
$query1 = "CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X"; $query2 = "CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH)"; $query3 = "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)"; $query4 = "SELECT *, @rank_change = prev_rank - current_rank AS rank_change FROM final_output";
Notre objectif consiste à exécuter les quatre requêtes dans un seul script PHP, puis à utiliser mysql_fetch_array pour récupérer les résultats de la quatrième requête. Cependant, lorsque nous essayons de le faire, nous rencontrons des erreurs ou recevons un tableau de récupération vide.
Pour exécuter plusieurs requêtes dans un seul script PHP, nous pouvons utiliser mysqli_multi_query. Voici le code mis à jour :
$link = mysqli_connect("server", "user", "password", "database"); $query = " CREATE VIEW current_rankings AS SELECT * FROM main_table WHERE date = X; CREATE VIEW previous_rankings AS SELECT rank FROM main_table WHERE date = date_sub('X', INTERVAL 1 MONTH); 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); SELECT *, @rank_change = prev_rank - current_rank AS rank_change FROM final_output; "; if (mysqli_multi_query($link, $query)) { do { 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)); }
En utilisant mysqli_multi_query, nous concaténons les quatre requêtes en une seule chaîne et les exécutons. Chaque ensemble de résultats est ensuite stocké dans $result et peut être récupéré à l'aide de mysqli_fetch_array.
Il est également possible d'exécuter des requêtes séparément et de stocker les résultats dans des tables temporaires. Par exemple :
$query1 = "Create temporary table A select c1 from t1"; 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']; }
Dans cette approche, la première requête crée une table temporaire nommée A. Nous sélectionnons ensuite les données de A dans la deuxième requête et récupérons les résultats.
Les deux approches peuvent être utilisé en fonction des exigences spécifiques et de la structure de la base de données.
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!