Position actuelle: Accueil> Derniers articles> [Conseils pratiques et suggestions d'opération pour la fonction Real_Query lors de l'exécution de plusieurs requêtes SQL

[Conseils pratiques et suggestions d'opération pour la fonction Real_Query lors de l'exécution de plusieurs requêtes SQL

gitbox 2025-06-11

Introduction à Real_Query ()

MySQLI :: Real_Query () est une fonction de bas niveau fournie par l'extension MySQLI dans PHP, qui est utilisée pour envoyer une instruction SQL Query au serveur MySQL sans obtenir le jeu de résultats immédiatement. Sa conception de base est utilisée avec store_result () et use_result () , permettant aux développeurs de contrôler le comportement à grain fin avant de traiter les résultats, et même à maintenir un processus d'exécution clair lors de l'exécution de plusieurs requêtes.

 $mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "SELECT * FROM users";
$mysqli->real_query($sql);
$result = $mysqli->store_result();

Scénarios communs pour exécuter plusieurs requêtes SQL

Real_Query () lui-même ne prend pas en charge l'exécution de plusieurs instructions de requête à la fois (séparées par des demi-finales), mais vous pouvez simuler ce comportement en contrôlant l'appel à la fonction plusieurs fois, ou implémenter des requêtes combinées en combinaison avec Multi_Query () . Si plusieurs déclarations doivent être exécutées un par une, ce qui suit est un moyen possible et sûr de le faire face:

 $queries = [
    "INSERT INTO logs (event) VALUES ('login')",
    "UPDATE users SET last_login = NOW() WHERE id = 1",
    "SELECT * FROM users WHERE id = 1"
];

foreach ($queries as $query) {
    if (!$mysqli->real_query($query)) {
        echo "Query failed: " . $mysqli->error;
        continue;
    }

    if ($result = $mysqli->store_result()) {
        while ($row = $result->fetch_assoc()) {
            print_r($row);
        }
        $result->free();
    }
}

Plusieurs conseils pratiques dans les scénarios d'utilisation

1. Transactions de contrôle finement

Tout en utilisant Real_Query () pour exécuter plusieurs requêtes, une logique métier complexe peut être implémentée en combinaison avec des mécanismes de transaction.

 $mysqli->begin_transaction();

try {
    $mysqli->real_query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $mysqli->real_query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    $mysqli->commit();
} catch (Exception $e) {
    $mysqli->rollback();
    error_log($e->getMessage());
}

2. Évitez les risques d'injection SQL

Bien que Real_Query () soit une fonction sous-jacente, elle doit également être utilisée en conjonction avec le mécanisme de prétraitement. Dans les situations où le prétraitement ne peut pas être effectué, assurez-vous d'utiliser Real_escape_string () pour échapper à l'entrée de l'utilisateur.

 $name = $mysqli->real_escape_string($_GET['name']);
$sql = "SELECT * FROM users WHERE name = '$name'";
$mysqli->real_query($sql);
$result = $mysqli->store_result();

3. Suggestions de débogage visuel

Afin d'aider les développeurs à comprendre le processus d'exécution de SQL plus clairement, ils peuvent enregistrer l'instruction d'exécution actuelle et le temps d'exécution après chaque appel à Real_Query () :

 $start = microtime(true);
$mysqli->real_query($sql);
$duration = microtime(true) - $start;
file_put_contents('/var/log/sql_exec.log', "Executed in $duration: $sql\n", FILE_APPEND);

4. Utiliser avec des requêtes non structurées

Parfois, vous utilisez Real_Query () pour certains SQL génératifs, tels que le renvoi de données structurées à partir d'une interface, puis la convertir en SQL:

 $data = file_get_contents('https://gitbox.net/api/v1/users');
$users = json_decode($data, true);

foreach ($users as $user) {
    $name = $mysqli->real_escape_string($user['name']);
    $mysqli->real_query("INSERT INTO users (name) VALUES ('$name')");
}

Notes et résumé

Bien que Real_Query () fournit un contrôle plus détaillé, il est également plus sujet aux erreurs en raison de ses fonctionnalités sous-jacentes. Les développeurs doivent l'utiliser:

  • Pour clarifier si la requête renvoie le résultat;

  • Gérer manuellement les ressources de définition de résultats;

  • Faites attention à la logique du traitement des erreurs;

  • Évitez les abus pour provoquer un code verbeux.

Dans l'ensemble, Real_Query () est un outil puissant lorsque vous avez des besoins de contrôle plus profonds pour l'exécution de SQL, et est particulièrement adapté au traitement de données moyen et à haute complexité ou à des implémentations de middleware de base de données. Combiné avec les transactions, le traitement des résultats et l'utilisation du mécanisme de journalisation, ses avantages peuvent être apportés à l'extrême.

  • Étiquettes associées:

    SQL