Frage

Bin ich Verständnis zu korrigieren, dass die mysql LAST_INSERT_ID () Funktion nicht zwischen dem Einsatz Versuch nicht zurücksetzt (wie @@ identity funktioniert in SQL-Server) ... dass, wenn der unmittelbar vorausgehende Einsatz Vorgang fehlschlägt, LAST_INSERT_ID () wird die Rückkehr pk von was auch immer das Stück dieser letzten Einsatz der Verbindung zu jeder Tabelle mit einem automatischen Primärschlüssel war. Und wenn ich in diesen richtig bin, scheint dies nicht so einfach über die am meisten verzögerte Verhalten für diese Funktion, die man einfiel? Gibt es keine MySQL-Funktion, die ähnlich wie @@ Identität des SQL-Server verhält? Eines, das wird NULL zurückgeben, wenn der unmittelbar vor Insert Versuch keine neue Datensatz erstellt? Alternativ wie weiß man mit Sicherheit den Primärschlüssel des letzten Einfügevorgang?

War es hilfreich?

Lösung

@@ Identität ist in der Regel falsch als auch in SQL Server. Sie sollten stattdessen in den meisten Fällen mit scope_identity() sein.

In MySql, LAST_INSERT_ID () sollte sicher zu verwenden, da die einzige Möglichkeit, diese Funktion aufrufen können, nachdem ein Einsatz Fehler haben Sie bereits richtig gefangen und machten den Einsatz Fehler. Sonst wären Sie immer noch Befehle verarbeiten. Mit anderen Worten, LAST_INSERT_ID () ist nicht Ihr Fehlerbehandlungsmechanismus.

Andere Tipps

Sie müssen überprüfen, um zu sehen, ob der Einsatz erfolgreich war zuerst. Wenn der Einsatz erfolgreich war, dann können Sie auf LAST_INSERT_ID verlassen ().

edit: in PHP:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top