Position actuelle: Accueil> Derniers articles> Comment obtenir le bon ID d'insertion en combinaison avec MySQLI_STMT :: $ INSERT_ID dans le traitement des transactions?

Comment obtenir le bon ID d'insertion en combinaison avec MySQLI_STMT :: $ INSERT_ID dans le traitement des transactions?

gitbox 2025-06-03

1. Le défi de l'acquisition d'identité de transaction et d'insertion

Lorsque nous effectuons plusieurs opérations d'insertion ou insert des données dans une transaction, il peut être inexact de lire l'ID de mise en œuvre automatique directement via MySqli-> INSERT_ID , en particulier lorsqu'il est un accès simultané multi-thread ou multi-utilisateurs. En utilisant la propriété $ insert_id de l'instruction prétraitée, vous pouvez vous assurer que l'ID d'insert affecté par l'instruction actuelle est obtenu.

2. Introduction à mysqli_stmt :: $ insert_id

mysqli_stmt :: $ insert_id est un nouvel attribut ajouté dans les versions PHP 8.1 et ultérieures. Il est spécifiquement utilisé pour obtenir l'ID d'auto-incitation après avoir exécuté des instructions de prétraitement. Il est plus précis et sûr que $ mysqli-> insert_id .


3. Exemple de code

L'exemple suivant montre comment effectuer une opération d'insertion à l'aide de mysqli_stmt dans une transaction et d'obtenir l'ID de l'enregistrement d'insertion:

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

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

try {
    // Instructions d&#39;insertion de prétraitement
    $stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

    $username = 'alice';
    $email = '[email protected]';

    $stmt->bind_param("ss", $username, $email);

    // Effectuer une insertion
    $stmt->execute();

    // Obtenez l&#39;insertion ID
    $insertId = $stmt->insert_id;

    echo "Utilisateurs nouvellement insérésIDOui: " . $insertId . "\n";

    // Soumettre les transactions
    $mysqli->commit();

    $stmt->close();
} catch (Exception $e) {
    // Une erreur s&#39;est produite
    $mysqli->rollback();
    echo "Échec de la transaction,En arrière。message d&#39;erreur: " . $e->getMessage();
}

$mysqli->close();
?>

4. Résumé des points clés

  • Lorsque vous effectuez une opération d'insertion dans une transaction, appelez d'abord $ mysqli-> begin_transaction () pour démarrer la transaction. Une fois l'opération terminée, appelez $ mysqli-> commit () à soumettre. S'il échoue, appelez $ mysqli-> rollback () pour rollback.

  • Utilisez l'instruction de prétraitement MySQLI_STMT pour effectuer l'insertion pour éviter le risque d'injection SQL.

  • Une fois l'insertion réussie, obtenez l'ID d'incrémentation automatique de cet insert via $ stmt-> insert_id pour assurer la précision.

  • Les transactions doivent être annulées lors de la gestion des exceptions pour garantir la cohérence et l'intégrité des données.


5. Description de la compatibilité

mysqli_stmt :: $ insert_id n'est disponible qu'en PHP 8.1 et supérieur. Si vous utilisez une ancienne version de PHP, vous pouvez envisager d'utiliser $ mysqli-> insert_id , mais faites attention aux problèmes de concurrence.