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.
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 .
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'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'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'est produite
$mysqli->rollback();
echo "Échec de la transaction,En arrière。message d'erreur: " . $e->getMessage();
}
$mysqli->close();
?>
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.
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.