Wie bekomme ich die letzte eingefügte ID einer MySQL-Tabelle in PHP?

Ich habe eine Tabelle, in die häufig neue Daten eingefügt werden. Ich muss die letzte ID der Tabelle bekommen. Wie kann ich das machen?

Ähnelt es SELECT MAX(id) FROM table ?

Wenn Sie PDO verwenden, verwenden Sie PDO::lastInsertId .

Wenn Sie Mysqli verwenden, verwenden Sie mysqli::$insert_id .

Wenn Sie noch Mysql verwenden:

Bitte verwenden Sie keine mysql_* -functionen in neuem Code . Sie werden nicht länger gewartet und sind offiziell veraltet . Siehe die rote Box ? Erfahren Sie mehr über vorbereitete statementen und verwenden Sie PDO oder MySQLi – dieser Artikel wird Ihnen dabei helfen zu entscheiden, welche. Wenn Sie PDO wählen, ist hier ein gutes Tutorial .

Wenn Sie müssen, verwenden Sie mysql_insert_id .

Es gibt eine function, um zu wissen, welche letzte ID in die aktuelle Verbindung eingefügt wurde

 mysql_query('INSERT INTO FOO(a) VALUES(\'b\')'); $id = mysql_insert_id(); 

Außerdem ist die Verwendung von max eine schlechte Idee, da dies zu Problemen führen kann, wenn der Code gleichzeitig in zwei verschiedenen Sitzungen verwendet wird.

Diese function heißt mysql_insert_id

Es ist in Ordnung. Sie können auch LAST_INSERT_ID () verwenden

Mit PDO :

 $pdo->lastInsertId(); 

Mit Mysqli :

 $mysqli->insert_id; 

Bitte verwenden Sie keine mysql_* -functionen in neuem Code . Sie werden nicht länger gewartet und sind offiziell veraltet . Siehe die rote Box ? Erfahren Sie mehr über vorbereitete statementen und verwenden Sie PDO oder MySQLi – dieser Artikel wird Ihnen dabei helfen zu entscheiden, welche. Wenn Sie PDO wählen, ist hier ein gutes Tutorial .

Verwenden Sie die function mysql_insert_id () .

Siehe ähnliche Frage hier

Was Sie geschrieben haben, würde Ihnen die größte id vorausgesetzt, sie wären einzigartig und automatisch inkrementiert. Das wäre in Ordnung, wenn Sie damit einverstanden sind, dass Sie concurrencysprobleme auf sich laden.
Da Sie MySQL als database verwenden, gibt es die spezifische function LAST_INSERT_ID() die nur für die aktuelle Verbindung funktioniert, die die Einfügung durchgeführt hat.
PHP bietet eine spezielle function für das sogenannte mysql_insert_id .

Sie können die neueste eingefügte ID von der eingebauten PHP-function mysql_insert_id();

 $id = mysql_insert_id(); 

Sie erhalten auch die neueste ID von

 $id = last_insert_id(); 

Die zuletzt eingefügte ID in den Code-Codierer eingeben Nach dem Ausführen der Insert-Abfrage verwenden Sie einfach eine function namens insert_id() in der database, es wird die letzte eingefügte ID zurückgeben

Ex:

 $this->db->insert('mytable',$data); echo $this->db->insert_id(); //returns last inserted id 

in einer Zeile

 echo $this->db->insert('mytable',$data)->insert_id(); 

Es ist in mysql_insert_id() , mysql_insert_id() , aber es gibt einen spezifischen Hinweis zur Verwendung, Sie müssen es nach der ausgeführten INSERT-Abfrage aufrufen, dh in derselben Skript-Sitzung. Wenn Sie es sonst verwenden, würde es nicht richtig funktionieren.

Versuchen Sie, das sollte gut funktionieren:

 $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $query = "INSERT blah blah blah..."; $result = mysqli_query($link, $query); echo mysqli_insert_id($link); 

HINWEIS: Wenn Sie mehrere Einfügungen mit einer statement ausführen, ist mysqli :: insert_id nicht korrekt.

Der Tisch:

create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));

Nun, wenn du es tust:

insert into xyz (name) values('one'),('two'),('three');

Die mysqli :: insert_id wird 1 nicht 3 sein.

Um den richtigen Wert zu erhalten, mach folgendes:

mysqli::insert_id + mysqli::affected_rows) - 1

Dies ist ein Dokument, aber es ist ein wenig unklar.

Ich bevorzuge eine reine MySQL-Syntax, um die letzte auto_increment-ID der gewünschten Tabelle zu erhalten.

php mysql_insert_id () und mysql last_insert_id () geben nur die letzte Transaktions-ID an.

Wenn Sie die letzte automatisch_inkrementierte ID einer beliebigen Tabelle in Ihrem Schema (nicht nur die letzte Transaktion) möchten, können Sie diese Abfrage verwenden

 SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table_name'; 

Das ist es.

Es ist traurig, keine Antworten mit einem Beispiel zu sehen.

Mit Mysqli :: $ insert_id :

 $sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)"; $mysqli->query($sql); $last_inserted_id=$mysqli->insert_id; // returns last ID 

Mit PDO :: lastInsertId :

 $sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)"; $database->query($sql); $last_inserted_id=$database->lastInsertId(); // returns last ID 

Sauber und einfach –

 $selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1"; $result = $mysqli->query($selectquery); $row = $result->fetch_assoc(); echo $row['id']; 

Unter Verwendung von MySQLi Transaktion konnte ich manchmal mysqli::$insert_id nicht bekommen, weil es 0 zurückgab. Vor allem, wenn ich gespeicherte Prozeduren verwendete, führte das INSERT s aus. Es gibt also einen anderen Weg innerhalb der Transaktion:

 < ?php function getInsertId(mysqli &$instance, $enforceQuery = false){ if(!$enforceQuery)return $instance->insert_id; $result = $instance->query('SELECT LAST_INSERT_ID();'); if($instance->errno)return false; list($buffer) = $result->fetch_row(); $result->free(); unset($result); return $buffer; } ?> 

Verwenden Sie mysqli, da mysql entzogen wird

 < ?php $mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } // Conside employee table with id,name,designation $query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')"; $mysqli->query($query); printf ("New Record has id %d.\n", $mysqli->insert_id); /* close connection */ $mysqli->close(); ?> 

Ich habe es versucht

mysqli_insert_id ($ dbConnectionObj)

Dies gibt die zuletzt eingefügte ID der aktuellen Verbindung zurück. Wenn Sie Ihre Verbindungen ordnungsgemäß verwalten, sollte dies funktionieren. Arbeitete für mich zumindest.

Bitte benutze PDP und versuche es dann

 $stmt = $db->prepare("..."); $stmt->execute(); $id = $db->lastInsertId(); 

$ lastid = mysql_insert_id ();

Bei all dieser Diskussion gehe ich davon aus, dass der Grund für die Überprüfung von max id ist, zu wissen, welche id als nächstes sein soll. (Wenn meine max id 5 ist, dann ist next 5 + 1 = 6).

>> Wenn das nicht der Grund ist, meine beste Entschuldigung

Fall, wenn jemand anderes Informationen zwischen Ihrem CHECK und INSERT eingibt, würde Ihnen eine falsche ID geben.

So kann es getriggers werden, wenn Sie Hash erstellen würden, der Zeitstempel oder andere eindeutige Werte enthalten könnte.

Dann können Sie in derselben function Ihre Informationen mit leeren Werten und Ihrem Hash einfügen. Das würde ID erstellen, wenn Sie AUTO_INCRECEMENT ausgewählt haben.

Dann hätten Sie in der gleichen function immer noch Ihren Hash und Sie könnten mit demselben Hash nach ID suchen. Und dann können Sie leere Werte mit mysql UPDATE füllen.

Dies beinhaltet ein bisschen mehr Verbindungen, aber es ist immer noch ein Weg, es zu tun …

Viel Glück, es zu lösen.

Wenn Ihre Tabelle eine AUTO INCREMENT-Spalte wie UserID, Emp_ID, .. hat, können Sie diese Abfrage verwenden, um den zuletzt eingefügten Datensatz zu erhalten. SELECT * FROM Tabellenname wobei UserID = (MAX (UserID) aus Tabellenname)

 $con = mysqli_connect('localhost', 'userid', 'password', 'database_name'); if (!$con) { die('Could not connect: ' . mysqli_error($con)); } $sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)"; $result = mysqli_query($con, $sql); 

Dann können Sie abgerufene Daten als Ihre Anforderung verwenden

 mysql_query("INSERT INTO mytable (product) values ('kossu')"); printf("Last inserted record has id %d\n", ***mysql_insert_id()***);