2017-05-14 3 views
0

Ich habe einen sehr einfachen Web-Service (PHP), der Daten in zwei Tabellen einfügt.SQL PHP erhalten letzte ID

Sehr schönes und einfaches Skript

$conn = new MySQLi($servername, $username, $password, $dbname); 
$sql = "INSERT INTO db (NAME) VALUES ('$Name')"; 
mysqli_query($conn,$sql); 

Der Einsatz nächste Tabelle ist ziemlich einfach aber verwendet eine automatische Inkrementieren ID aus der obigen Tabelle/Insert.

Wenn ich $ conn-> insert_id verwende, was würde passieren, wenn ich zwei Threads dieses Skript verwenden würde und beide eine Einfügung machen, bevor ich insert_id aufrufen?

Dank

+0

warum nicht Sie versuchen es vermeiden sollte, und uns sagen? –

Antwort

1

Vom documentation:

Die mysqli_insert_id() gibt die ID von einer Abfrage (in der Regel INSERT) auf einem Tisch mit einer Spalte mit dem Attribut AUTO_INCREMENT erzeugt zurückgibt. Wenn keine INSERT- oder UPDATE-Anweisungen über diese Verbindung gesendet wurden oder wenn die geänderte Tabelle keine Spalte mit dem AUTO_INCREMENT -Attribut hat, wird diese Funktion Null zurückgeben.

Schwerpunkt meiner. Die Funktion mysqli_insert_id gibt die ID zurück, die mit der aktuellen Verbindung eingefügt wurde. PHP ist nicht "threaded", was bedeutet, dass jede Anfrage abgeschlossen und beendet wird, bevor eine neue gestartet wird (etwas vereinfacht, aber Sie können es sich so vorstellen). Dies garantiert zusammen mit der Implementierung der Funktion, dass Sie die korrekte ID erhalten.

0

Um Konflikte zu vermeiden Sie die Abfrage unten vor dem Einsetzen können:

<?php 
$sql = "SELECT your_incremented_id FROM db ORDER BY DESC LIMIT 1"; 

$result=mysqli_query($conn,$sql); 

$id_result=mysql_fetch_assoc($result); 

//get the last inserted row id 


$id=$id_result['your_incremented_id']+1; 

$time=rand(0,0.2); 
sleep($time); 
// your insert query with the new id 

?> 

, das Ihr Problem