2010-10-11 11 views
1

Existe-t-il un moyen d'obtenir les derniers ID auto_increment générés après avoir inséré plusieurs lignes avec la fonction mysqli multi_query?PHP MySQLi insert ids à partir de multi_query()

EDIT:

j'ai réussi à le faire fonctionner en ajoutant SELECT LAST_INSERT_ID(); après chaque requête INSERT dans la requête multiple, puis utilisez le mysqli_use_result pour obtenir tous les identifiants, et je pense que c'est la meilleure façon.

+1

Avez-vous essayé 'mysqli_insert_id'? –

+0

Renvoie le dernier identifiant uniquement tous les – user453984

+0

+1 pour l'ajout de la réponse – abel

Répondre

5

Vous pouvez récupérer les différents identifiants d'insertion en appelant le next_result() de MySQLi pour chaque instruction d'insertion consécutive. Autant que je sache, vous n'avez pas à stocker de résultats tant que les requêtes sont des instructions d'insertion ou quelque chose qui ne renvoie pas un ensemble de résultats.

$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; 

Vous pouvez aussi mettre cela dans une boucle si vous n'êtes pas sûr de combien de déclarations d'insertion, il y a:

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

Ceci est un code non testé pseudo (comme vous pourriez avoir figuré), mais il faut travail.