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.
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 .
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();
?>
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.
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.