Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для malor
48 / 44 / 3
Регистрация: 02.07.2007
Сообщений: 2,568

LAST_INSERT_ID() иногда возвращает ноль. Это не хорошо

04.07.2013, 03:14. Показов 5392. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создается запись в БД. Сразу после этого пытаемся получить её ID:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  $SQL = ' SELECT LAST_INSERT_ID() AS last_id ';
  $st = $db->query($SQL);
 
  $rowcount = $st->rowCount();
  if ($rowcount == 0)
  {
    echo 'Не получили ID последней вставленной записи.';
    exit;
  }
 
  $st->setFetchMode(PDO::FETCH_ASSOC);
  $row = $st->fetch();
  if ($row)
  {
    $inserted_id = $row['last_id'];  
  }      
 
  $newconsultation = 'Location: add_cons.php?id_man='.$inserted_id;
  header($newconsultation);
Так вот почему-то $inserted_id бывает равна нулю. Хотя в большинстве случаев все нормально, адекатный ID возвращается.
Инет усеян вопросами про то, отчего "LAST_INSERT_ID()" возвращает 0. Причем автоинкрементный столбец есть в таблице.
Пишут, что MySQL успевает разорвать одно соединение, и создать новое, а в этом новом нет памяти о прошлом, поэтому и ноль.

Где-то советуют сразу объединить текст INSERT-запроса и запроса про "LAST_INSERT_ID()", разделив их точкой с запятой.

Но четкого ответа нет. Это ж ключевой вопрос использования связки MySQL+PHP.
Не может не быть решения.

MySQL 5.5.29
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2013, 03:14
Ответы с готовыми решениями:

LAST_INSERT_ID всегда возвращает 0
что я делаю не так? MySQLQuery.SQL.Text := 'INSERT INTO docs (sid, name, ext, data) VALUES (:SID,:NAME,:EXT,:DATA)'; ...

LAST_INSERT_ID() возвращает 0 когда полно данных в таблице
Не знаю почему LAST_INSERT_ID() возвращает 0 после вставки в таблицу данных последний индекс больше 300. Что я не так делаю? На...

Почему программа иногда возвращает не нулевой результат, а иногда нуль?
С чем подобное может быть связана?

5
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
04.07.2013, 06:20
PHP
1
$SQL = ' SELECT MAX(`id`) AS `last_id` FROM `table_name`';
0
 Аватар для malor
48 / 44 / 3
Регистрация: 02.07.2007
Сообщений: 2,568
04.07.2013, 12:43  [ТС]
А что если другие пользователи, работающие с сайтом вклинятся между вставкой (записи, INSERT-ом) и получением MAX(`id`)?
0
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
04.07.2013, 12:52
если используешь PDO то для него есть такая штука
PHP
1
$lastId = $dbh->lastInsertId();
0
 Аватар для malor
48 / 44 / 3
Регистрация: 02.07.2007
Сообщений: 2,568
04.07.2013, 12:55  [ТС]
С этой штуки всё и начиналось. Она выдавала иногда 0.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.07.2013, 16:18
malor, У Вашей проблемы полностью отсутствует предыстория. Сразу раз - и финал. Без предыстории можно сказать "да, такое поведение является нормальным для некоторых ситуаций". Так что либо изложите предысторию, либо изучайте документацию на предмет нюансов, которые уместны в Вашем случае:
http://dev.mysql.com/doc/refma... -insert-id
http://dev.mysql.com/doc/refma... rt-id.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2013, 16:18
Помогаю со студенческими работами здесь

Иногда звук не хорошо работает на компьютере
я перезагружаю компьютер и звук становится как обычно материнская плата ASUS P8P67 Windows 7 67 bit максимальная

В типе float иногда возвращает -0
Иногда на экран выводится -0,000, если точность 3 стоит. Тип float. о чем это может свидетельствовать? Неужто оо очень малом числе? ...

Now().DateString() иногда возвращает пустую строку
Добрый день! В программе предусмотен вывод информации о дате и времени Информацию получаю так TDateTime NowTime = Now(); ...

fwrite, возвращает ноль, хотя...
FILE *h; if ((h = fopen("1.p", "w")) == NULL) {printf("Can't create 1.p.\n");exit(1);} char buff; k+=size; ...

Функция (int) возвращает ноль
Добрый день! Пишу скрипт корзины, столкнулся с таким вопросом. Я делаю изменение кол-ва товара на ajax, что бы без перезагр. и у меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru