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
Форумы портала PHP.SU :: Версия для печати :: Возврат произвольного поля после INSERT
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Возврат произвольного поля после INSERT

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

1. Haron - 06 Мая, 2011 - 18:46:51 - перейти к сообщению
Допустим, есть у нас запрос:

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


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

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

Есть ли решение?
2. molchun201 - 06 Мая, 2011 - 19:03:07 - перейти к сообщению
может в запросе использовать LAST_INSERT_ID() ? Растерялся
3. Haron - 06 Мая, 2011 - 19:07:24 - перейти к сообщению
Ну это да, только вот как его вывести? И как вывести поле не являющееся IDом? (TIMESTAMP например?)

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

Так что на данный момент надо бы как-то в пределах запроса INSERT ...
4. EuGen - 06 Мая, 2011 - 19:47:18 - перейти к сообщению
А зачем выводить CURRENT_TIMESTAMP?

SELECT NOW();

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

SELECT LAST_INSERT_ID();

Не очень понимаю, что Вы имеете ввиду под "вывести"
5. Haron - 06 Мая, 2011 - 23:11:59 - перейти к сообщению
EuGen пишет:
Не очень понимаю, что Вы имеете ввиду под "вывести"


- Вернуть в результате запроса.
6. Саныч - 06 Мая, 2011 - 23:32:29 - перейти к сообщению
Haron пишет:
Вернуть в результате запроса.

не получится... при INSERT-е возвращается либо true, либо false в зависимости от результата... Если же вы хотите получить ид, под которым вставлена последняя запись нужно после инсерта еще один запросс
7. evgenijj - 07 Мая, 2011 - 01:25:11 - перейти к сообщению
Саныч пишет:
при 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" );

 

Powered by ExBB FM 1.0 RC1