LAST_INSERT_ID() и DUPLICATE KEY UPDATE

Духовность™

Продвинутый новичок
LAST_INSERT_ID() и DUPLICATE KEY UPDATE

В мане описано как получить last insert id при INSERT INTO ... ON DUPLICATE KEY UPDATE

У меня есть код:
PHP:
// обновляем что-то (или делаем вставку)
mysql_query('INSERT INTO ... ON DUPLICATE KEY UPDATE ...');

// хотим вытащить новые обновленные значения, где id = LAST_INSERT_ID()
$res = mysql_query('SELECT ... FROM ... WHERE id = LAST_INSERT_ID()') or die(mysql_error());
$data = mysql_fetch_row($res) or die(mysql_error());
print_r($data);
этот код ошибки не выдает. но и print_r ничего не выводит.

В чем проблема, кто может сказать? Можно ли вообще LAST_INSERT_ID() в таком контексте использовать?
 

gray07

Новичок
мне кажется, что если срабатывает ON DUPLICATE KEY UPDATE, то никакого LAST_INSERT_ID() нету и быть не может...

-~{}~ 19.07.08 00:22:

естественно WHERE id = null возвратит пустой результат
 

gray07

Новичок
ну там описано же

By using the ON DUPLICATE KEY UPDATE clause, only the old datarow will be modified, if the INSERT statement causes a duplicate entry, but the LAST_INSERT_ID() function returns the next auto_increment value for the primary key, which is by the way not set as the next auto_increment value in the database.

The mysql_insert_id() function returns the primary key of the old (and changed) data row. For me this is the right operation method, because the LAST_INSERT_ID() function returns a value which is not referenced to a data row at all.

-~{}~ 19.07.08 01:34:

очень странное поведение mysql кстати...

-~{}~ 19.07.08 01:36:

хотя, если бы он возвращал id предыдущего "нормального" INSERT багов было бы больше
 

voituk

прозревший
Hint: Посмотри LAST_INSERT_ID() - с параметром.
Когда-то я уже делал то, что ты хочешь.
 
Сверху