Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Получить ID строки после обновления
 
 автор: TetRiska   (17.05.2013 в 21:45)   письмо автору
 
 

Всем привет. Не получается определить ИД обновляемой строки. mysql_insert_id() возвращает 0. Автоинкрементное поле имеет тип ИНТ.

Ф-ция:
function update_query($table, $arr, $where=''){
    mysql_query("UPDATE `".$table."` SET ".$arr.($where != '' ? ' WHERE '.$where : ''));
        return mysql_insert_id();
}

Запрос:
$where = "`em_business_group_id` = 66";
$arr  = "`em_produce_data_upd` = '".date('Y-m-d H:i:s')."'";
$update = update_query('em_produce',$arr,$where);

echo $update; //0

  Ответить  
 
 автор: confirm   (17.05.2013 в 22:36)   письмо автору
 
   для: TetRiska   (17.05.2013 в 21:45)
 

А с чего UPDATE должен возвращать идентификатор генерируемый колонкой с AUTO_INCREMENT? Разве при этом новое значение генерируется?
Вы же задаете WHERE '.$where... значит знаете для какой записи, значит и id ее знать можно.

  Ответить  
 
 автор: TetRiska   (17.05.2013 в 23:37)   письмо автору
 
   для: confirm   (17.05.2013 в 22:36)
 

в where не поле которое нужно вывести........нужное поле em_produce_id (автоинкремент), вот после обновления мне нужно вывести ИД этого поля

  Ответить  
 
 автор: confirm   (17.05.2013 в 23:56)   письмо автору
 
   для: TetRiska   (17.05.2013 в 23:37)
 

И что вам мешает получить это поле? WHERE у вас определяет одну конкретную запись (если вы об id говорите), так наверное же этой записи вас и интересует поле em_produce_id. Ну не соседней же записи надо полагать. Так неужели по значению, по которому обращаются к строке для обновления нельзя получить поле em_produce_id этой записи?

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 00:02)   письмо автору
 
   для: confirm   (17.05.2013 в 23:56)
 

можно селектом, но я не хотел бы еще писать 1 запрос :(

  Ответить  
 
 автор: confirm   (18.05.2013 в 01:05)   письмо автору
 
   для: TetRiska   (18.05.2013 в 00:02)
 

Пробуйте, получите именно апдейтом, получите шнобелевку.

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 01:07)   письмо автору
 
   для: confirm   (18.05.2013 в 01:05)
 

не понял, вы о чем?

  Ответить  
 
 автор: confirm   (18.05.2013 в 01:45)   письмо автору
 
   для: TetRiska   (18.05.2013 в 01:07)
 

А вы о чем? Я о том, что если вам после UPDATE mysql_insert_id() вернет номер, который UPDATE ухитрился сформировать, можете заказывать фрак и отправляться в Стокгольм. )

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 02:47)   письмо автору
 
   для: confirm   (18.05.2013 в 01:45)
 

)) это я уже понял, что mysql_insert_id() не вернет нужного значения, но мне не хочется делать лишнего запроса для определения ИД... разве на стороне мускула нет никаких манипуляций?

  Ответить  
 
 автор: DangerBay   (18.05.2013 в 08:43)   письмо автору
 
   для: TetRiska   (18.05.2013 в 02:47)
 

function update_query($table, $arr, $where=''){
    mysql_query("UPDATE `".$table."` SET id=LAST_INSERT_ID(id), " . $arr . ($where != '' ? ' WHERE ' . $where : ''));
    return mysql_insert_id();
}

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 13:11)   письмо автору
 
   для: DangerBay   (18.05.2013 в 08:43)
 

то, что нужно, спасибо

  Ответить  
 
 автор: confirm   (18.05.2013 в 13:32)   письмо автору
 
   для: TetRiska   (18.05.2013 в 13:11)
 

Надо объяснять, что это обновление ваше после вставки записи, и почему сразу после нее не сохраняется id, а обязательно нужно изголяться?

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 13:36)   письмо автору
 
   для: confirm   (18.05.2013 в 13:32)
 

не совсем понял ваше высказывание, вроде бы все верно объяснил в начале топика

идет обычное обновление записи по where и дабы избежать доп. запроса select, чтобы выбрать ид по тому же where, я задумался - есть ли возможность вернуть ид обновляемой записи, оказывается есть

мне этот ид нужен для запроса на удаление

  Ответить  
 
 автор: confirm   (18.05.2013 в 14:14)   письмо автору
 
   для: TetRiska   (18.05.2013 в 13:36)
 

Темный лес какой-то.

Что такое mysql_insert_id() вы знаете, и должны знать, что эта функция работает с последним выполненным запросом, и если нужно сохранить id, то mysql_insert_id() нужно выполнять сразу после запроса вставки.
А функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный id и не обнуляется между запросами.

Но в том и другом случае, это последний сгенерированный id. То есть смыл всей вашей математики только в том случае будет, если именно он вас интересует. Вы же и сейчас сообщаете, что идет обычное обновление записи по where, то есть даже и намека нет на какой-то последний id. И что же за id вам надо в таком случае, какого-то последнего запроса?

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 14:29)   письмо автору
 
   для: confirm   (18.05.2013 в 14:14)
 

вроде начинаю догонять...если в таблице идут такие ИД (автоинкремент):

4
66
72
112

и я хочу обновить 72 запись, то мне вернет ИД 112 записи?

  Ответить  
 
 автор: confirm   (18.05.2013 в 14:53)   письмо автору
 
   для: TetRiska   (18.05.2013 в 14:29)
 

Естественно последний, об этом даже в названии функции есть - LAST_

PS. Надо добавить, что вернет только в рамках текущего соединения, а не в любое вам угодное время.

  Ответить  
 
 автор: TetRiska   (18.05.2013 в 15:20)   письмо автору
 
   для: confirm   (18.05.2013 в 14:53)
 

понял, спасибо, буду селект использовать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования