Получить insert_id для всех строк, вставленных в один запрос mysqli (несколько значений)

Работа в PHP и использование MYSQLI. Попытка получить insert_id для всех строк, вставленных из одного запроса на вставку с несколькими значениями. Сохраняя его в едином призыве к эффективности. Мой фактический код содержит сотни значений в одном запросе на вставку. Однако здесь приведен пример кода для вставки с четырьмя значениями:

$sql = "INSERT INTO link_tags ( string_names_id, urls_id ) VALUES ( '2', '17' ), ( '8', '31' ), ( '8', '1' ), ( '8', '4' )"; $mysqli->query($sql); echo "id's: " .$mysqli->insert_id; 

Вышеприведенный код достигает вставки, но дает мне только идентификатор первой вставки из вызова. Как я могу получить все идентификаторы для этого единственного запроса?

Следует с уверенностью предположить, что ваши идентификаторы – mysql_insert_id + следующие 3 (независимо) подряд, так как ваш оператор выполняется в одной транзакции

Нет, это невозможно с MySQL.

Его даже не позволяет сохранить LAST_INSERT_ID() поскольку он вернет значение BIGINT (64-разрядное), представляющее первое автоматически сгенерированное значение, успешно вставленное для столбца AUTO_INCREMENT.

Вы могли догадаться, что это значение + длина вашего списка данных будет идентификатором, но нет абсолютной гарантии, что это всегда будет верно.

Как указал @thomas, я использовал это решение и предположил, что нормально обнаруживать последний идентификатор вставки;

 $id = $link->insert_id; if ($id && $link->affected_rows > 1) { $id = ($id + $link->affected_rows) - 1; // sub first id num } 

В вашей ситуации (для всех идентификаторов);

 $id = $link->insert_id; $ids = [$id]; if ($id && $link->affected_rows > 1) { for ($i = 0; $i < $link->affected_rows - 1; $i++) { $ids[] = $id + 1; } } // or more dirty way $id = $link->insert_id; $ids = [$id]; if ($id && $link->affected_rows > 1) { $ids = range($id, ($id + $link->affected_rows) - 1); } 

Между тем, я использовал multi_query и обрабатывал результат во время цикла, но не смог достичь ожидаемого результата.

 while ($link->more_results() && $link->next_result()) $ids[] = $link->insert_id;