Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   трабла с LAST_INSERT_ID в MySQL (https://forum.antichat.xyz/showthread.php?t=110555)

159932 11.03.2009 20:19

трабла с LAST_INSERT_ID в MySQL
 
версия мускула - 5.0.51b
версия пхп - 5.2.6
ос - xp sp3

проблемма с данной ф-ией, постоянно возвращает ноль.

почитал енг форумы, такая проблемма возникает у многих на вин, но никто дельного ответа так и не дал .. у некоторых проблемма только в 98м или 2к, а в xp всё гут ..

ктото сталкивался с данной проблеммой ?
что можно сделать?

Pashkela 11.03.2009 20:45

не?

Цитата:

If a table contains an AUTO_INCREMENT column and INSERT ... UPDATE inserts a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. If the statement updates a row instead, LAST_INSERT_ID() is not meaningful. However, you can work around this by using LAST_INSERT_ID(expr). Suppose that id is the AUTO_INCREMENT column. To make LAST_INSERT_ID() meaningful for updates, insert rows as follows:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
в смысле причина типа здесь:

Цитата:

if a table contains an AUTO_INCREMENT column and INSERT ... ON DUPLICATE KEY UPDATE updates (rather than inserts) a row, the value of LAST_INSERT_ID() is not meaningful
типо если в табле есть AUTO_INCREMENT и INSERT ... ON DUPLICATE KEY UPDATE (не INSERT), то типо будет хрень возвращать, тогда надо типо:

LAST_INSERT_ID(id)

в смысле указывать конкретную колонку типо

Chaak 11.03.2009 20:47

SELECT LAST_INSERT_ID(id) FROM payments

159932 11.03.2009 20:51

пробовал LAST_INSERT_ID(id) .. понулям.

это автоинкримент и примари.

LAST_INSERT_ID(id) - возвращает только не ноль, а еденицу .. хотя записей много больше.

Pashkela 11.03.2009 21:03

Цитата:

last_insert_id() такая конструкция может возвращать 0 цитирую книгу "возвращает значение функции auto_increment, которое было сгенерировано последним во время текущего сеанса работы сервера "
т.е. если с момента вставки вы гасили сервер то будет 0

проверь, не разрываешь ли ты соединение в процессе вставки и получения этого last_insert_id() , т.е. типо это все дожно быть одновременно в течении одного сеанса

Хреновые клиенты как правило выполняют каждый запрос в своем соединении. Поэтому и last_insert_id() нулевой. Так что зайдите ка лучше в mysql.exe и попробуйте оттуда.

Для проверки можете открыть два клиента, вставить в одном строку и выполнить в обоих
select last_insert_id()
получите в одном случае N во втором 0
Кароче хз:)

159932 12.03.2009 02:49

топик можно закрыть.

Pashkela 12.03.2009 03:03

дык если решил - поделиться не вредно:)

159932 12.03.2009 03:13

саму траблу с данной ф-ие не решил ..
но я изначально ступил .. сделал иначе просто.
сделал desc + limit

Doom123 12.03.2009 09:23

кому интересно вот пральный ответ

SELECT LAST_INSERT_ID(id) AS `lid` FROM `news` WHERE 1 ORDER BY `lid` DESC LIMIT 1


Время: 19:43