it-swarm.com.de

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 abrufen. Wie kann ich das machen?

Ist es ähnlich zu SELECT MAX(id) FROM table?

85
gweg

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

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

Wenn Sie Mysql noch verwenden:

Bitte verwenden Sie keine mysql_*-Funktionen im neuen Code . Sie werden nicht mehr gepflegt und sind offiziell nicht mehr aktuell . Siehe die rote Box ? Informieren Sie sich stattdessen über vorbereitete Anweisungen und verwenden Sie PDO oder MySQLi - dieser Artikel , um die Entscheidung zu treffen. Wenn Sie sich für PDO entscheiden, hier ist ein gutes Tutorial .

Wenn Sie müssen, verwenden Sie mysql_insert_id .

122
deceze

es gibt eine Funktion, um zu erfahren, welche ID in der aktuellen Verbindung zuletzt eingefügt wurde

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

plus Verwenden von max ist eine bad Idee, da dies zu problemen führen kann, wenn Ihr Code gleichzeitig in zwei verschiedenen Sitzungen verwendet wird.

Diese Funktion heißt mysql_insert_id

50
RageZ

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

21
x2.

Mit PDO :

$pdo->lastInsertId();

Mit Mysqli :

$mysqli->insert_id;

Bitte verwenden Sie keine mysql_*-Funktionen im neuen Code . Sie werden nicht mehr gepflegt und sind offiziell nicht mehr aktuell . Siehe die rote Box ? Informieren Sie sich stattdessen über vorbereitete Anweisungen und verwenden Sie PDO oder MySQLi - dieser Artikel , um die Entscheidung zu treffen. Wenn Sie sich für PDO entscheiden, hier ist ein gutes Tutorial .

18
Neal

Verwenden Sie mysql_insert_id () function.

Siehe ähnliche Frage hier

9
NawaMan

Was Sie geschrieben haben, würde Ihnen die besten id Annahmen bieten, vorausgesetzt, sie waren einzigartig und automatisch inkrementiert. Dies wäre in Ordnung, wenn Sie einladende Parallelitätsprobleme akzeptieren.
Da Sie MySQL als Datenbank verwenden, gibt es die spezifische Funktion LAST_INSERT_ID() , die nur für die aktuelle Verbindung funktioniert, die das Einfügen vorgenommen hat.
PHP bietet dafür eine spezielle Funktion namens mysql_insert_id .

7
dlamblin

Sie können die zuletzt eingefügte ID über die eingebaute PHP-Funktion mysql_insert_id(); abrufen.

$id = mysql_insert_id();

sie erhalten auch die neueste ID von

$id = last_insert_id();
4
Rahul

Es ist in Ordnung, mysql_insert_id(), Zu verwenden, aber es gibt einen speziellen Hinweis zur Verwendung. Sie müssen es nach der ausgeführten INSERT-Abfrage aufrufen, dh in derselben Skript-Sitzung. Wenn Sie es anderweitig verwenden, funktioniert es nicht richtig.

3
Mihail Dimitrov

Um die letzte eingefügte ID in codeigniter .__ abzurufen, verwenden Sie nach der Ausführung der Einfügeabfrage nur eine Funktion mit dem Namen insert_id() für die Datenbank. Die zuletzt eingefügte ID wird zurückgegeben

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();
3
Narsimha

Versuchen Sie, dass dies gut funktionieren sollte:

$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);

echo mysqli_insert_id($link);
3
Sandhu

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

Verwenden von 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

PDO :: lastInsertId verwenden :

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

Ich bevorzuge die Verwendung einer reinen MySQL-Syntax, um die letzte auto_increment-ID der gewünschten Tabelle abzurufen.

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

Wenn Sie die letzte automatisch_inkrementierte ID einer Tabelle in Ihrem Schema wünschen (nicht nur die letzte Transaktion), 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.

1
syjust

HINWEIS: Wenn Sie mehrere Einfügungen mit einer Anweisung 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 Sie dies tun:

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

Die mysqli :: insert_id ist 1 und nicht 3.

Um den richtigen Wert zu erhalten, gehen Sie wie folgt vor:

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

Dies ist ein Dokument, aber es ist ein bisschen dunkel.

1
bartonlp

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'];
1
Hitesh

Ich habe es versucht 

mysqli_insert_id ($ dbConnectionObj)

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

0
user2166373

Verwenden Sie mysqli als mysql  

<?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();
?>
0
Poorna Rao

Bitte verwenden Sie PDP und versuchen Sie es dann 

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

Mit MySQLi transaction konnte ich manchmal mysqli::$insert_id nicht abrufen, da es 0 zurückgab. Besonders wenn ich gespeicherte Prozeduren verwendete, INSERTs. 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;
}

?>
0
BlitZ