Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
трабла с LAST_INSERT_ID в MySQL |

11.03.2009, 20:19
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
трабла с LAST_INSERT_ID в MySQL
версия мускула - 5.0.51b
версия пхп - 5.2.6
ос - xp sp3
проблемма с данной ф-ией, постоянно возвращает ноль.
почитал енг форумы, такая проблемма возникает у многих на вин, но никто дельного ответа так и не дал .. у некоторых проблемма только в 98м или 2к, а в xp всё гут ..
ктото сталкивался с данной проблеммой ?
что можно сделать?
|
|
|

11.03.2009, 20:45
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
не?
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)
в смысле указывать конкретную колонку типо
|
|
|

11.03.2009, 20:47
|
|
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
Провел на форуме: 5321514
Репутация:
3313
|
|
SELECT LAST_INSERT_ID(id) FROM payments
|
|
|

11.03.2009, 20:51
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
пробовал LAST_INSERT_ID(id) .. понулям.
это автоинкримент и примари.
LAST_INSERT_ID(id) - возвращает только не ноль, а еденицу .. хотя записей много больше.
Последний раз редактировалось 159932; 11.03.2009 в 20:57..
|
|
|

11.03.2009, 21:03
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
last_insert_id() такая конструкция может возвращать 0 цитирую книгу "возвращает значение функции auto_increment, которое было сгенерировано последним во время текущего сеанса работы сервера "
т.е. если с момента вставки вы гасили сервер то будет 0
проверь, не разрываешь ли ты соединение в процессе вставки и получения этого last_insert_id() , т.е. типо это все дожно быть одновременно в течении одного сеанса
Хреновые клиенты как правило выполняют каждый запрос в своем соединении. Поэтому и last_insert_id() нулевой. Так что зайдите ка лучше в mysql.exe и попробуйте оттуда.
Для проверки можете открыть два клиента, вставить в одном строку и выполнить в обоих
select last_insert_id()
получите в одном случае N во втором 0
Кароче хз 
|
|
|

12.03.2009, 02:49
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
топик можно закрыть.
|
|
|

12.03.2009, 03:03
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
дык если решил - поделиться не вредно 
|
|
|

12.03.2009, 03:13
|
|
Постоянный
Регистрация: 28.09.2007
Сообщений: 820
Провел на форуме: 6722038
Репутация:
1385
|
|
саму траблу с данной ф-ие не решил ..
но я изначально ступил .. сделал иначе просто.
сделал desc + limit
|
|
|

12.03.2009, 09:23
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
кому интересно вот пральный ответ
SELECT LAST_INSERT_ID(id) AS `lid` FROM `news` WHERE 1 ORDER BY `lid` DESC LIMIT 1
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|