Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
LAST_INSERT_ID() считает неправильно (Kreon) 19/11/2003 - 01:47:47
      Re: LAST_INSERT_ID() считает неправильно (walrus) 19/11/2003 - 20:24:41

> Original message text:
> From: Kreon - 19/11/2003 - 01:47:47
> Subject:LAST_INSERT_ID() считает неправильно
> -----------------
> Я пользуюсь функцией LAST_INSERT_ID() из Perl:
>
> $dbh->do("INSERT INTO tablename VALUES (NULL,$data")");
> $id=$dbh->do("SELECT LAST_INSERT_ID() FROM tablename");
>
> Но эта функция выдает совсем левое, а именно число, посчитанное как "число_строк+1", а совсем не то, что было вставлено. Разница становится заметна, если номера id идут не подряд, а какие-то из них были удалены.
>
> Проверяю на WinMySQL 4.0.13
>
>


From: walrus - 19/11/2003 - 20:24:41
Subject:LAST_INSERT_ID() считает неправильно
-----------------
что возвращает $dbh->do() ?
Этот метод возвращает _не_ результат запроса, а количество задействованных строк. Например если вы делаете какое то update, do() вернет вам сколько строк изменилось в таблице в результате вашего запроса. Если вы делает select, то do() вернет вам сколько записей было выбрано.

То есть :
вы делаете запрос
select last_insert_id() from tablename;

Если в таблице содержится (скажем) 3 записи, а last_insert_id() должен возвращать 6 (это просто например), результат будет

6
6
6

- сервер вычислит функцию last_insert_id() для каждой записи в таблице, а поскольку она не зависит от записи, результат в каждой строке будет 6. Но выведет именно 3 строки (по числу записей в таблице) . Теперь вы делаете
$dbh->do("select last_insert_id() from tablename"),

do() вернет (должен вернуть) вам 3 - это число строк, которые он выбрал, а не результат last_insert_id()

Правильый путь - делать
select last_insert_id()
а не
select last_insert_id() from tablename

И выбирать данные правльными методами DBI.

Другой вариант, при использоваении DBD::mysql -
вместо запроса с last_insert_id() вы можете это сразу посмотреть в $dbh->{'mysql_insertid'}










[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
11732



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |