2017-05-14 61 views
0

我有一個非常基本的web服務(PHP),其將數據插入到兩個表。SQL PHP獲取最後一個ID

非常好,簡單的腳本

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

下表的插入是非常簡單但是從上面的表格/插入使用自動遞增的ID。

如果我使用$ conn-> INSERT_ID如果我有兩個線程使用這個腳本,並都做插入之前,我打電話INSERT_ID會發生什麼?

由於

+0

你爲什麼不嘗試一下,告訴我們什麼? –

回答

1

documentation

的mysqli_insert_id()函數返回由對錶的查詢(通常INSERT)與具有AUTO_INCREMENT屬性的列生成的ID。如果沒有INSERT或UPDATE語句都通過發送此連接,或者如果修改表中沒有與AUTO_INCREMENT屬性的列,該函數將返回零。

強調我的。

換句話說,mysqli_insert_id返回插入與當前連接的ID的功能。 PHP是不是「線程」,這意味着每一個請求已完成,殺了一個新的開始之前(有些簡化,但你可以把它想象這樣)。這與函數的實現一起保證您將得到正確的ID返回。

0

爲了避免衝突,你可以在插入之前做下面的查詢:

<?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 

?> 

應該避免你的問題