Position actuelle: Accueil> Derniers articles> STMT_INIT combinée avec des fonctions de transaction (début_transaction, commit, rollback)

STMT_INIT combinée avec des fonctions de transaction (début_transaction, commit, rollback)

M66 2025-05-29

Lorsque vous effectuez des opérations de base de données dans PHP, MySQLI est une extension très courante qui fournit des interfaces orientées objet et procédurales. Aujourd'hui, nous discuterons de la façon de combiner la fonction MySQLI :: STMT_INIT avec le contrôle des transactions ( Begin_transaction , commit , rollback ) pour améliorer la stabilité et l'efficacité des opérations de base de données.

1. Introduction à mysqli :: stmt_init

MySQLI :: STMT_INIT est une méthode de la classe MySQLI qui est utilisée pour initialiser une instruction de prétraitement. Les déclarations préparées peuvent non seulement empêcher les attaques d'injection SQL, mais également améliorer l'efficacité d'exécution des requêtes de base de données. Étant donné que lorsque vous utilisez des instructions de prétraitement, l'instruction de requête sera analysée une fois, et différents paramètres peuvent être transmis pendant l'exécution, réduisant la surcharge répétée des instructions SQL.

2. Concepts de base de contrôle des transactions

Dans une base de données, une transaction fait référence à un ensemble d'opérations de base de données qui réussissent ou échouent. Les transactions garantissent la cohérence des données et la fiabilité. Les opérations de base d'une transaction comprennent:

  • begin_transaction : démarrer une transaction.

  • Commit : engager les transactions afin que les modifications de la base de données prennent effet.

  • Rollback : transactions en arrière et révoquer toutes les opérations de la transaction.

3. Combiner MySqli :: STMT_INIT avec contrôle des transactions

Lorsque vous effectuez plusieurs opérations de base de données, vous devrez peut-être vous assurer que ces opérations réussissent ou échouent. Pour y parvenir, vous pouvez utiliser le contrôle des transactions.

L'utilisation de mysqli :: stmt_init combinée à un contrôle de transaction peut garantir la stabilité de plusieurs opérations de base de données. Si une opération échoue pendant l'exécution, vous pouvez faire reculer la transaction pour révoquer toutes les opérations exécutées pour garantir la cohérence de la base de données.

Voici un exemple de code PHP combinant mysqli :: stmt_init avec contrôle de transaction:

 <?php
// Créer une connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database_name");

// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}

// Démarrer une transaction
$mysqli->begin_transaction();

try {
    // Initialiser les déclarations de prétraitement
    $stmt = $mysqli->stmt_init();
    
    // La première opération d&#39;insertion
    if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
        $username = 'user1';
        $email = 'user1@m66.net';
        $stmt->bind_param("ss", $username, $email);
        $stmt->execute();
    } else {
        throw new Exception("Échec de la déclaration");
    }

    // La deuxième opération d&#39;insertion
    if ($stmt->prepare("INSERT INTO orders (user_id, product) VALUES (?, ?)")) {
        $user_id = 1; // En supposant l&#39;utilisateurIDpour1
        $product = 'Product A';
        $stmt->bind_param("is", $user_id, $product);
        $stmt->execute();
    } else {
        throw new Exception("Échec de la déclaration");
    }

    // Soumettre les transactions
    $mysqli->commit();
    echo "Transaction Soumise avec succès!";
} catch (Exception $e) {
    // Faire reculer la transaction lorsqu&#39;une erreur se produit
    $mysqli->rollback();
    echo "Rollback des transactions: " . $e->getMessage();
}

// Fermer la connexion
$mysqli->close();
?>

4. Explication du code

  1. Établir une connexion de base de données: utilisez la nouvelle fonction mysqli () pour vous connecter à la base de données MySQL. Si la connexion échoue, le programme publie un message d'erreur et arrête l'exécution.

  2. Démarrez une transaction: utilisez $ mysqli-> begin_transaction () pour démarrer une transaction. Après le début de la transaction, toutes les opérations de la base de données sont exécutées dans la transaction jusqu'à ce que la transaction soit engagée ou en arrière.

  3. Initialiser et préparer des instructions de prétraitement: utilisez la méthode $ mysqli-> stmt_init () pour initialiser un objet de déclaration de prétraitement. Utilisez ensuite la méthode $ stmt-> prépare () pour préparer la requête SQL.

  4. Bind Paramètres et exécuter: utilisez la méthode $ stmt-> bind_param () pour lier les paramètres dans les instructions SQL pour garantir que les données sont insérées en toute sécurité. Ensuite, utilisez $ stmt-> execute () pour exécuter l'instruction de prétraitement.

  5. Commission ou transaction de retour: si toutes les opérations réussissent, utilisez $ mysqli-> engage () pour engager la transaction et enregistrer toutes les modifications dans la base de données. Si une erreur est rencontrée lors de l'exécution, une exception est lancée et la transaction est reculée à l'aide de $ mysqli-> rollback () dans le bloc de l'instruction Catch , révoquant toutes les opérations précédentes.

  6. Connexion de fermeture: une fois l'opération terminée, fermez la connexion de la base de données via $ mysqli-> close () .

5. Avantages

En combinant MySQLI :: STMT_INIT avec le contrôle des transactions, vous pouvez profiter des avantages suivants:

  • Empêcher l'injection de SQL: l'utilisation de déclarations de prétraitement peut effectivement prévenir les attaques d'injection SQL.

  • Améliorer l'efficacité: les instructions de prétraitement n'ont pas besoin d'analyser SQL à plusieurs reprises lors de l'exécution, en réduisant la charge de la base de données.

  • Assurer la cohérence des données: grâce au contrôle des transactions, l'atomicité des opérations de base de données est assurée, soit toutes les succès ou toutes les échoues, en évitant les incohérences de données.

  • Gestion des exceptions: si une erreur se produit pendant le fonctionnement, vous pouvez faire reculer la transaction pour vous assurer que la base de données n'est pas corrompue.

6. Conclusion

En combinant la fonction MySQLI :: STMT_INIT et le contrôle des transactions ( début_transaction , commit , rollback ), vous pouvez améliorer la stabilité et l'efficacité des programmes PHP pour les opérations de base de données. Cela évite non seulement efficacement les problèmes d'injection de SQL, mais assure également la cohérence des données lorsque plusieurs opérations de base de données échouent et évitent la corruption des données.