2010-10-11 87 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()); 

这是未经测试的伪代码(如你可能已经想通),但它应该工作。