2010-10-11 85 views
1

有沒有辦法在用mysqli multi_query函數插入多行後獲取最後生成的auto_increment ID?PHP MySQLi從multi_query()插入ids()

編輯:

我設法得到它通過添加SELECT LAST_INSERT_ID工作();在多查詢中的每個INSERT查詢之後,然後使用mysqli_use_result來獲取所有ID,並且我認爲這是最好的方法。

+1

你嘗試過'mysqli_insert_id'嗎? – 2010-10-11 01:16:07

+0

僅返回最後一個ID並非全部 – user453984 2010-10-11 01:17:30

+0

+1用於添加答案 – abel 2010-10-11 10:48:00

回答

5

您可以通過調用MySQLi的每個連續插入語句的next_result()來獲取不同的插入ID。據我所知,只要查詢是插入語句或其他不返回結果集的東西,就不必存儲任何結果。

$sql = new MySQLi("..."); 
$query = "INSERT STATEMENT NUMBER ONE;"; 
$query .= "INSERT STATEMENT NUMBER TWO;"; 
$query .= "INSERT STATEMENT NUMBER THREE"; 
$sql->multi_query($query); 

// The first insert id will be available at once 
$id1 = $sql->insert_id; 

// The second needs to be handeled a little differently 
$sql->next_result(); 
$id2 = $sql->insert_id; 

// And lastly the third one 
$sql->next_result(); 
$id3 = $sql->insert_id; 

你也可以把這個在一個循環中,如果您不確定有多少INSERT語句有:

$ids = array(); 
do 
{ 
    $ids[] = $sql->insert_id; 
    $sql->next_result(); 
} while($sql->more_results()); 

這是未經測試的僞代碼(如你可能已經想通),但它應該工作。