Aktueller Standort: Startseite> Neueste Artikel> Wie erhalte ich die richtige Einfügungs -ID in Kombination mit MySQLI_STMT :: $ Insert_id in der Transaktionsverarbeitung?

Wie erhalte ich die richtige Einfügungs -ID in Kombination mit MySQLI_STMT :: $ Insert_id in der Transaktionsverarbeitung?

gitbox 2025-06-03

1. Die Herausforderung der Transaktions- und Insertions -ID -Erfassung

Wenn wir mehrere Einfügevorgänge ausführen oder Daten in eine Transaktion einfügen, kann es ungenau sein, die autoIncrement-ID direkt über MySQLi-> Insert_ID zu lesen, insbesondere wenn Multi-Threaded- oder Multi-Benutzer gleichzeitiger Zugriff. Mit der Eigenschaft $ Insert_id der vorverarbeiteten Anweisung können Sie sicherstellen, dass die durch die aktuelle Anweisung betroffene Einfügungs -ID erhalten wird.

2. Einführung in MySQLI_STMT :: $ Insert_id

MySQLI_STMT :: $ Insert_id ist ein neues Attribut, das in PHP 8.1 und späteren Versionen hinzugefügt wurde. Es wird speziell verwendet, um die Selbststillstands-ID nach der Ausführung von Vorverarbeitungsanweisungen zu erhalten. Es ist genauer und sicherer als $ mysqli-> insert_id .


3. Beispielcode

Das folgende Beispiel zeigt, wie eine Einfügungsoperation mit MySQLI_STMT in einer Transaktion durchgeführt wird und die ID des Einfügendatensatzes abgerufen wird:

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

// Starten Sie eine Transaktion
$mysqli->begin_transaction();

try {
    // Vorverarbeitungseinfügungsanweisungen
    $stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

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

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

    // Insertion durchführen
    $stmt->execute();

    // Holen Sie sich das Einfügen ID
    $insertId = $stmt->insert_id;

    echo "Neu eingefügte BenutzerIDJa: " . $insertId . "\n";

    // Transaktionen einreichen
    $mysqli->commit();

    $stmt->close();
} catch (Exception $e) {
    // Ein Fehler trat eine Rollback -Transaktion auf
    $mysqli->rollback();
    echo "Transaktion fehlgeschlagen,Zurückgerollt。Fehlermeldung: " . $e->getMessage();
}

$mysqli->close();
?>

4. Zusammenfassung der wichtigsten Punkte

  • Rufen Sie bei der Durchführung eines Einfügungsvorgangs in einer Transaktion $ mySQLI-> begin_transaktion () zu, um die Transaktion zu starten. Rufen Sie nach Abschluss der Operation $ MySQLI-> Commit () an, um einzureichen. Wenn es fehlschlägt, rufen Sie $ mysqli-> rollback () zum Rollback.

  • Verwenden Sie die MySQLI_STMT -Vorverarbeitungserklärung, um das Einsetzen durchzuführen, um das Risiko einer SQL -Injektion zu vermeiden.

  • Wenn die Einfügung erfolgreich ist, erhalten Sie die automatische Inkrement-ID dieses Einfügungseinsatzes über $ stmt-> insert_id, um die Genauigkeit zu gewährleisten.

  • Transaktionen müssen während der Ausnahmebehandlung zurückgerollt werden, um die Konsistenz und Integrität der Daten zu gewährleisten.


5. Kompatibilitätsbeschreibung

MySQLI_STMT :: $ Insert_id ist nur in PHP 8.1 und oben erhältlich. Wenn Sie eine alte Version von PHP verwenden, können Sie in Betracht ziehen , $ mysqli-> insert_id zu verwenden, aber auf Probleme mit der Parallelität achten.