Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Возврат произвольного поля после INSERT

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Возврат произвольного поля после INSERT
Haron
Отправлено: 06 Мая, 2011 - 18:46:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Допустим, есть у нас запрос:

CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO tabloid
  2. (shit, fuck)
  3. VALUES ($shit, $fuck)


В таблице также имеется поле mtl_id с автоинкрементом
Задача - изменить запрос таким образом, чтобы он возвращал идентификатор вставленной записи (mtl_id). Либо любое другое поле имеющее значение по умолчанию типа CURRENT_TIMESTAMP

mysql_insert_id(), ну короче эту... php-функцию не предлагать, по ряду причин её использовать нельзя.

Есть ли решение?

(Отредактировано автором: 06 Мая, 2011 - 18:52:04)



-----
И чё?
 
 Top
molchun201
Отправлено: 06 Мая, 2011 - 19:03:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 295
Дата рег-ции: Февр. 2011  
Откуда: Менеск


Помог: 5 раз(а)




может в запросе использовать LAST_INSERT_ID() ? Растерялся


-----
Обрамляйте код тегами и читайте
 
 Top
Haron
Отправлено: 06 Мая, 2011 - 19:07:24
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Ну это да, только вот как его вывести? И как вывести поле не являющееся IDом? (TIMESTAMP например?)

На ум пришло использовать хранимые процедуры для подобного рода, вещей, но с ними тоже возникли проблемы.

Так что на данный момент надо бы как-то в пределах запроса INSERT ...

(Отредактировано автором: 06 Мая, 2011 - 19:09:22)



-----
И чё?
 
 Top
EuGen Администратор
Отправлено: 06 Мая, 2011 - 19:47:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А зачем выводить CURRENT_TIMESTAMP?

SELECT NOW();

А для ID Вам подскажали:

SELECT LAST_INSERT_ID();

Не очень понимаю, что Вы имеете ввиду под "вывести"


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Haron
Отправлено: 06 Мая, 2011 - 23:11:59
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




EuGen пишет:
Не очень понимаю, что Вы имеете ввиду под "вывести"


- Вернуть в результате запроса.


-----
И чё?
 
 Top
Саныч
Отправлено: 06 Мая, 2011 - 23:32:29
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Haron пишет:
Вернуть в результате запроса.

не получится... при INSERT-е возвращается либо true, либо false в зависимости от результата... Если же вы хотите получить ид, под которым вставлена последняя запись нужно после инсерта еще один запросс


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
evgenijj
Отправлено: 07 Мая, 2011 - 01:25:11
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Саныч пишет:
при INSERT-е возвращается либо true, либо false в зависимости от результата... Если же вы хотите получить ид, под которым вставлена последняя запись нужно после инсерта еще один запрос


Других вариантов нет. Кроме кривых -- если новые записи вставляются одним процессом -- всегда можно получить
SELECT MAX(id) FROM items
и вставить MAX(id)+1, игнорируя auto_increment. Ну и еще один вариант -- еще более кривой
$query = "SHOW TABLE STATUS LIKE 'items'";
$res = mysql_query( $query );
$next_id = mysql_result( $es, 0, "Auto_increment" );

(Отредактировано автором: 07 Мая, 2011 - 01:25:45)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB