как узнать id после INSERT в php

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
UserAleks
Сообщения: 5
Зарегистрирован: 05 сен 2007, 11:41

как узнать id после INSERT в php

Сообщение UserAleks » 05 сен 2007, 11:59

Вопрос в том как ме узнать id после INSERT используя PHP

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Re: как узнать id после INSERT в php

Сообщение Sparton » 05 сен 2007, 12:01

Я делаю так:

сначала выполняю $id = ibase_gen_id();
потом при insert into tbl (ID, NAME) values ($id, $name)

UserAleks
Сообщения: 5
Зарегистрирован: 05 сен 2007, 11:41

Сообщение UserAleks » 05 сен 2007, 12:35

Да я так пробовал но уменя ругаеться на ibase_gen_id - незнает такую функцию.
Это мне какую dll обновуть нужно? PHP вроде 4.3.10

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Сообщение Sparton » 05 сен 2007, 12:50

У меня начала работать на PHP 5, для 4 писал функцию

Код: Выделить всё

//$name_gen - имя генератора
//$num_gen - какое число прибавить к значению
//$srv - соед к БД

function ibase_gen_id($name_gen,$num_gen,$srv) {

 $sql = "select gen_id($name_gen, $num_gen) from rdb\$database";

 $f=ibase_query($srv,$sql);
 $r=ibase_fetch_row($f); 
 
return $r[0];
                        }

UserAleks
Сообщения: 5
Зарегистрирован: 05 сен 2007, 11:41

Сообщение UserAleks » 05 сен 2007, 14:57

Sparton писал(а):У меня начала работать на PHP 5, для 4 писал функцию

Код: Выделить всё

//$name_gen - имя генератора
//$num_gen - какое число прибавить к значению
//$srv - соед к БД

function ibase_gen_id($name_gen,$num_gen,$srv) {

 $sql = "select gen_id($name_gen, $num_gen) from rdb\$database";

 $f=ibase_query($srv,$sql);
 $r=ibase_fetch_row($f); 
 
return $r[0];
                        }
я тож думал о подобном, но через MAX(ID).
но вот вся проблема в том что например MySQL есть функция(точно не помню) которая находит наивысший ID и +1 и держит его пока не добавиться запись(если соединение не закрыто) и под этим номером другой конект не запишит в таблицу;
Если я ошибаюсь то поправте меня! но мне кажитьсяя что в данном примере есть шанс что ID ($r) займет другая запись? или тут тоже будет держать в резерве ID на данную сессию?
Блин я даже думал в все это дело в масив запихать и пусть пытеться пока не запихает.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 05 сен 2007, 14:59

я тож думал о подобном, но через MAX(ID).
читать www.ibase.ru/devinfo/generator.htm , срочно.
Если я ошибаюсь то поправте меня! но мне кажитьсяя что в данном примере есть шанс что ID ($r) займет другая запись? или тут тоже будет держать в резерве ID на данную сессию?
см. выше.

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

сортировка

Сообщение Attid » 05 сен 2007, 15:57

[quote="Sparton"][/quote]

а ты много на пхп+птах работаешь?

интересует следущее я получаю SQL запрос перед самым показом пользователю (беру из БД), соответственно получаю результат и отдаю юзверу, но потом он хочет его немного посортировать вот что делать дальше еще не придумал =)
есть 3 варианта (результат всегда в пределе 100 строк)
1, парсить запрос и добавлять\менять order by
(минус много запросов с юнионами)
2, запрос брать в подзапрос
(лишние насилование птички)
3, первый результат закешировать и работать только с ним, пусть апачь трудится
(не предстовляю как это сделать)


Есть опыт\предложения ?

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Re: сортировка

Сообщение Sparton » 05 сен 2007, 16:32

Ну я обычно просто запрос перестраивал и опять в БД его. А что если результат запроса в массив, а массив в сессию? Дальнейшей то обработке будет только полученный результат подвергаться..

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: как узнать id после INSERT в php

Сообщение Dimitry Sibiryakov » 06 сен 2007, 08:10

UserAleks писал(а):Вопрос в том как ме узнать id после INSERT используя PHP
Как уже сказали, обычно id узнают до INSERT. Но если приспичило именно после, то RETURNING тебе в руки.

UserAleks
Сообщения: 5
Зарегистрирован: 05 сен 2007, 11:41

Сообщение UserAleks » 06 сен 2007, 12:32

kdv писал(а):
я тож думал о подобном, но через MAX(ID).
читать www.ibase.ru/devinfo/generator.htm , срочно.
Если я ошибаюсь то поправте меня! но мне кажитьсяя что в данном примере есть шанс что ID ($r) займет другая запись? или тут тоже будет держать в резерве ID на данную сессию?
см. выше.
Спасибо статейка отличная:!:

UserAleks
Сообщения: 5
Зарегистрирован: 05 сен 2007, 11:41

Re: сортировка

Сообщение UserAleks » 06 сен 2007, 12:36

Attid писал(а):
Sparton писал(а):
а ты много на пхп+птах работаешь?

интересует следущее я получаю SQL запрос перед самым показом пользователю (беру из БД), соответственно получаю результат и отдаю юзверу, но потом он хочет его немного посортировать вот что делать дальше еще не придумал =)
есть 3 варианта (результат всегда в пределе 100 строк)
1, парсить запрос и добавлять\менять order by
(минус много запросов с юнионами)
2, запрос брать в подзапрос
(лишние насилование птички)
3, первый результат закешировать и работать только с ним, пусть апачь трудится
(не предстовляю как это сделать)


Есть опыт\предложения ?
ябы селектом забабахал все дело, но это если с перезагрузкой страницы, а если нет то парился и Яваскриптом извращялся используя масивы

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Re: сортировка

Сообщение Attid » 07 сен 2007, 13:42

Sparton писал(а):А что если результат запроса в массив, а массив в сессию? Дальнейшей то обработке будет только полученный результат подвергаться..
пример можешь нарисать ?

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Re: сортировка

Сообщение Sparton » 10 сен 2007, 23:22

Attid писал(а):пример можешь нарисать ?

Код: Выделить всё

$query="select id, name from TBL where id>0";
$sth=ibase_query($DB, $query);
$k=0;
while($row=ibase_fetch_assoc($sth)){
     $_SESSION['sql'][$k]= $row;
     $k++;
}
вот так.

Ответить