Maison >développement back-end >tutoriel php >Comment exécuter plusieurs requêtes MySQL dans un seul script PHP ?

Comment exécuter plusieurs requêtes MySQL dans un seul script PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 15:33:02537parcourir

How do I execute multiple MySQL queries in a single PHP script?

Exécuter plusieurs requêtes MySQL en 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.

Scénario de problème

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.

Solution

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.

Approche alternative

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn