|
|
|
| Всем привет. Не получается определить ИД обновляемой строки. 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
|
| |
|
|
|
|
|
|
|
для: TetRiska
(17.05.2013 в 21:45)
| | А с чего UPDATE должен возвращать идентификатор генерируемый колонкой с AUTO_INCREMENT? Разве при этом новое значение генерируется?
Вы же задаете WHERE '.$where... значит знаете для какой записи, значит и id ее знать можно. | |
|
|
|
|
|
|
|
для: confirm
(17.05.2013 в 22:36)
| | в where не поле которое нужно вывести........нужное поле em_produce_id (автоинкремент), вот после обновления мне нужно вывести ИД этого поля | |
|
|
|
|
|
|
|
для: TetRiska
(17.05.2013 в 23:37)
| | И что вам мешает получить это поле? WHERE у вас определяет одну конкретную запись (если вы об id говорите), так наверное же этой записи вас и интересует поле em_produce_id. Ну не соседней же записи надо полагать. Так неужели по значению, по которому обращаются к строке для обновления нельзя получить поле em_produce_id этой записи? | |
|
|
|
|
|
|
|
для: confirm
(17.05.2013 в 23:56)
| | можно селектом, но я не хотел бы еще писать 1 запрос :( | |
|
|
|
|
|
|
|
для: TetRiska
(18.05.2013 в 00:02)
| | Пробуйте, получите именно апдейтом, получите шнобелевку. | |
|
|
|
|
|
|
|
для: confirm
(18.05.2013 в 01:05)
| | не понял, вы о чем? | |
|
|
|
|
|
|
|
для: TetRiska
(18.05.2013 в 01:07)
| | А вы о чем? Я о том, что если вам после UPDATE mysql_insert_id() вернет номер, который UPDATE ухитрился сформировать, можете заказывать фрак и отправляться в Стокгольм. ) | |
|
|
|
|
|
|
|
для: confirm
(18.05.2013 в 01:45)
| | )) это я уже понял, что mysql_insert_id() не вернет нужного значения, но мне не хочется делать лишнего запроса для определения ИД... разве на стороне мускула нет никаких манипуляций? | |
|
|
|
|
|
|
|
для: 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();
}
|
| |
|
|
|
|
|
|
|
для: DangerBay
(18.05.2013 в 08:43)
| | то, что нужно, спасибо | |
|
|
|
|
|
|
|
для: TetRiska
(18.05.2013 в 13:11)
| | Надо объяснять, что это обновление ваше после вставки записи, и почему сразу после нее не сохраняется id, а обязательно нужно изголяться? | |
|
|
|
|
|
|
|
для: confirm
(18.05.2013 в 13:32)
| | не совсем понял ваше высказывание, вроде бы все верно объяснил в начале топика
идет обычное обновление записи по where и дабы избежать доп. запроса select, чтобы выбрать ид по тому же where, я задумался - есть ли возможность вернуть ид обновляемой записи, оказывается есть
мне этот ид нужен для запроса на удаление | |
|
|
|
|
|
|
|
для: TetRiska
(18.05.2013 в 13:36)
| | Темный лес какой-то.
Что такое mysql_insert_id() вы знаете, и должны знать, что эта функция работает с последним выполненным запросом, и если нужно сохранить id, то mysql_insert_id() нужно выполнять сразу после запроса вставки.
А функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный id и не обнуляется между запросами.
Но в том и другом случае, это последний сгенерированный id. То есть смыл всей вашей математики только в том случае будет, если именно он вас интересует. Вы же и сейчас сообщаете, что идет обычное обновление записи по where, то есть даже и намека нет на какой-то последний id. И что же за id вам надо в таком случае, какого-то последнего запроса? | |
|
|
|
|
|
|
|
для: confirm
(18.05.2013 в 14:14)
| | вроде начинаю догонять...если в таблице идут такие ИД (автоинкремент):
4
66
72
112
и я хочу обновить 72 запись, то мне вернет ИД 112 записи? | |
|
|
|
|
|
|
|
для: TetRiska
(18.05.2013 в 14:29)
| | Естественно последний, об этом даже в названии функции есть - LAST_
PS. Надо добавить, что вернет только в рамках текущего соединения, а не в любое вам угодное время. | |
|
|
|
|
|
|
|
для: confirm
(18.05.2013 в 14:53)
| | понял, спасибо, буду селект использовать | |
|
|
|