Das Erhalten der automatischen Wachstums-ID von gerecht nicht gemeldeten Daten ist eine häufige Anforderung bei der Verwendung von PHPs MySQLI-Erweiterung von PHP für Datenbankvorgänge. Insbesondere nach der Durchführung des Einfügungsvorgangs unter Verwendung einer Vorverarbeitungsanweisung ( MySQLI_STMT ) ist es besonders wichtig, den primären Schlüsselwert des automatischen Inkrements des Insertionsdatensatzes korrekt zu erhalten. In diesem Artikel wird ausführlich vorgestellt, wie dieser Wert über das Attribut mySQLI_stmt :: $ insert_id genau erhältlich ist.
Einige Tabellenfelder (normalerweise Primärschlüssel) in der MySQL -Datenbank können so eingestellt werden, dass das automatisch wachsen (auto_increment), und die Datenbank generiert jedes Mal, wenn ein neuer Datensatz eingefügt wird, automatisch eine neue eindeutige ID. Das Programmterminal muss diese ID kennen, um nachfolgende Operationen (wie Aktualisierungen, Verbände usw.) zu erleichtern.
Um das Risiko einer SQL -Injektion zu vermeiden, werden im Allgemeinen eine Vorverarbeitungsaussagen empfohlen. Der Beispielcode zum Einfügen von Daten lautet wie folgt:
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$username = "alice";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "Erfolgreich einfügen!";
} else {
echo "Einfügen fehlgeschlagen: " . $stmt->error;
}
?>
In diesem Beispiel fügen wir sicher eine neue Benutzerdaten über eine Vorverarbeitungsanweisung ein.
Es gibt eine Eigenschaft $ Insert_id im Objekt in MySQLI_STMT , mit dem die automatische Wachstums -ID des letzten Einfügungsvorgangs erhalten werden kann. Die Erfassungsmethode lautet wie folgt:
<?php
$insert_id = $stmt->insert_id;
echo "Gerade eingefügtIDJa: " . $insert_id;
?>
Beachten Sie, dass diese Eigenschaft nur sinnvoll ist, wenn der Einsatzbetrieb ausgeführt wird und die Tabelle ein automatisches Wachstumsfeld hat.
Hier ist ein vollständiges Beispiel, das zeigt, wie die neu eingefügte ID mit MySQLI_STMT :: $ Insert_id :
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
if (!$stmt) {
die("Die Vorverarbeitung schlug fehl: " . $mysqli->error);
}
$username = "bob";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
$insert_id = $stmt->insert_id;
echo "Erfolgreich einfügen!Neuer RekordIDJa: " . $insert_id;
} else {
echo "Einfügen fehlgeschlagen: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
Stellen Sie sicher, dass sich in der Tabelle ein Feld befindet, das auto_increment festgelegt ist, da $ Insert_id 0 zurückgibt.
Jedes Mal, wenn execute () ausgeführt wird, wird $ insert_id auf der aktuell eingefügten ID aktualisiert.
Wenn mehrere Datensätze in Stapel eingefügt werden, können Sie nur die Selbstunternehmens-ID des ersten Datensatzes erhalten, und die anschließende ID muss basierend auf der Anzahl der Einfügungen berechnet werden.
Es kann auch von $ mysqli-> insert_id erhalten werden (auf dem MySQLI-Verbindungsobjekt, in dem die Anweisung ausgeführt wird), wird jedoch empfohlen, $ stmt-> insert_id zu verwenden, um sicherzustellen, dass der Kontext konsistent ist.
Verwenden Sie MySQLI_STMT :: $ Insert_id, um die automatische Wachstums -ID des letzten Einfügungsvorgangs einfach und genau zu erhalten. Durch die Kombination von Vorverarbeitungsanweisungen kann die Datensicherheit und die Normativität des Codes verbessern. Die ordnungsgemäße Verwendung dieser Eigenschaft kann dazu beitragen, kohärente Logik und Datenintegrität von Datenbankvorgängen zu erreichen.