







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
11732
|
|