Intereting Posts
Кодирование значения параметра для SELECT в PHP-MySQL php mysql – выполняет ли mysql автоматическую блокировку строк при обновлении? xdebug не остановится в точке останова Несколько текстовых входов с одинаковым именем – добавить в базу данных PHP Pagination показывает первые две страницы и последние две страницы php.ini не существует. Загруженный файл конфигурации (нет) Почему PHP назначает контекст вызову статического метода и не дает уведомления E_STRICT? читать содержимое внешней веб-страницы и получать конкретные элементы Как изменить URL-адрес после успеха в ajax без перезагрузки страницы Создайте новый массив, используя значения из значений многомерного массива Что случилось с mysqli :: get_result? Как мне создать эффективный контент-фильтр для определенных сообщений? Программно очистить кеш на symfony 2 исправление зависания curl_exec в Windows 8 apache Возьмите значение массива, если имеется определенный ключ с PHP

Как получить все последние вставленные идентификаторы строк в mysql-php?

Есть ли эффективный способ извлечения всех последних вставленных строк автоматически увеличивающихся идентификаторов из базы данных mysql с помощью php? Предположим, я не знаю, сколько строк должно быть вставлено в пакет, но мне нужны все их идентификаторы после вставки.

После Googling я не нашел эффективного способа сделать это, поэтому я не уверен, что это возможно. Я могу следить за этим, но вам нужно удалять базу данных несколько раз, чтобы получить идентификаторы.

$data = array ( array(1,2), array(3,4), array(5,6) ); $ids = array(); foreach ($data as $item) { $sql = 'insert into table (a,b) values ('.$item[0].','.$item[1].')'; mysql_query ($sql); $ids[] = mysql_insert_id(); } 

Спасибо

Solutions Collecting From Web of "Как получить все последние вставленные идентификаторы строк в mysql-php?"

ваш код близок к полному решению.

 $data = array ( array(1,2), array(3,4), array(5,6) ); $ids = array(); foreach ($data as $item) { $sql = "INSERT INTO `table` (`a`, `b`) VALUES ('{$item[0]}' ,'{$item[1]}');"; mysql_query ($sql) or mysql_error(); $ids[] = mysql_insert_id(); } var_dump($ids); 

Если вопрос касается проблемы с производительностью, то другим решением может быть

 foreach ($data as $item) { $sql = "INSERT INTO `table`.`table` (`a`, `b`) VALUES ('{$item[0]}' ,'{$item[1]}');"; mysql_query ($sql) or mysql_error(); } $last_id = mysql_insert_id(); $total = count($data); for($i = 0; $i <= $total; $i++){ $ids[] = $total-$i; } 

Это предотвратит несколько запросов sql.

Mysql возвращает только последний вставленный id, к сожалению, нет способа получить все из них (прямо). Вам нужно будет использовать работу, например:

  1. Вычислите вставленные строки и последний вставленный идентификатор и вычислите остальную часть назад.

  2. Создавайте пользовательские идентификаторы вместо того, чтобы позволить mysql создавать их поэтапно, и если успех запроса вставки хранит идентификатор в массив (обычно, если один из них терпит неудачу, весь запрос будет терпеть неудачу в любом случае).

Второй метод рекомендуется, так как с n1, если вы выполняете сложные операции, например, используя INSERT blah blah ON DUPLICATE KEY модификации будут считаться 2 вставками (не спрашивайте меня, почему) вместо одного, и вам нужно сделайте некоторые расчеты, чтобы увидеть, сколько из них было фактически вставлено и сколько было изменено.

Кстати, перестань использовать расширение mysql_, оно устарело, используйте mysqli или pdo вместо

Если ваше поле auto_incremented является «нормальным», поэтому оно не ведет себя каким-то особым образом, но увеличивает последний id на единицу, вы можете найти максимальное его значение перед вставкой, а затем найти все записи, которые выше.

Пример:

 $sql = "SELECT id FROM table ORDER BY id DESC LIMIT 1"; // get maximal value before insert $sql = "SELECT id FROM table WHERE id > :last_id"; // get all new 

Но это решение не так уж и профессионально.

Когда мне нужно отслеживать партии введенных записей, у меня есть дополнительное поле в таблице, обычно обозначенное как штамп или что-то в этом роде. Когда записи вставляются, поле штампа затем заполняется текущей меткой времени, заданной функцией time (). Затем каждую партию можно отследить, независимо от того, сколько ей лет. Кроме того, сохранение метки времени – это простой способ получить точное время, когда они были добавлены.

Получение идентификатора последнего идентификатора вставки

  <?php $conn = mysql_connect('localhost', 'user', 'password'); mysql_select_db('test'); $data = array ( array(1,2), array(3,4), array(5,6) ); $ids = array(); foreach ($data as $item) { $sql = 'insert into testtable (a,b) values ('.$item[0].','.$item[1].')'; mysql_query ($sql, $conn); $id[] = mysql_insert_id($conn); }