PHP MySQLi вставить идентификаторы из multi_query () - PullRequest
2 голосов
/ 11 октября 2010

Есть ли способ получить последние сгенерированные идентификаторы auto_increment после вставки нескольких строк с функцией mysqli multi_query?

EDIT:

Мне удалось заставить его работать, добавив SELECT LAST_INSERT_ID ();после каждого запроса INSERT в мультизапросе, а затем используйте mysqli_use_result, чтобы получить все идентификаторы, и я думаю, что это лучший способ.

1 Ответ

8 голосов
/ 17 января 2013

Вы можете получить различные идентификаторы вставки, вызывая MySQLi next_result() для каждого последовательного оператора вставки.Насколько я знаю, вам не нужно хранить какие-либо результаты, если запросы представляют собой операторы вставки или что-то еще, что не возвращает набор результатов.

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

Вы также можете поместить это вцикл, если вы не уверены, сколько существует операторов вставки:

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

Это непроверенный псевдокод (как вы, возможно, предполагали), но он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...