Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 4 lety

PetrOdut
Nový člen
Registrovaný: 30. 10. 2008
Příspěvky: 3

LAST_INSERT_ID()

<?php
$arr = array(
    'name' => 'John',
    'is_admin'  => TRUE,
);
$result = dibi::query('INSERT INTO [table]', $arr);
?>

jde nejakym zpusobem ziskat ID, pod kterym byl do DB pridan zaznam, aniz bych musel pouzit dotaz dibi::query('SELECT LAST_INSERT_ID()'); ?

Editoval PetrOdut (30. 10. 2008 14:15)

 

#2 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: LAST_INSERT_ID()

dibi::insertId()

 

#3 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: LAST_INSERT_ID()

$id = dibi::insertId()

 

#4 před 4 lety

PetrOdut
Nový člen
Registrovaný: 30. 10. 2008
Příspěvky: 3

Re: LAST_INSERT_ID()

diky ;-)

 

#5 před 4 lety

jansfabik
Člen
Registrovaný: 9. 11. 2008
Příspěvky: 136

Re: LAST_INSERT_ID()

nevíte prosím někdo, jak mám toto řešit u Oracle/MS SQL?

 

#6 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: LAST_INSERT_ID()

MSSQL: SELECT @@IDENTITY

 

#7 před 4 lety

jansfabik
Člen
Registrovaný: 9. 11. 2008
Příspěvky: 136

Re: LAST_INSERT_ID()

nešlo by to nějak dosadit do insertID? u MSSQL a Oracle mi to jenom vyhodí výjimku

 

#8 před 4 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 879

Re: LAST_INSERT_ID()

Koukam, ze David to nema implementovany;)
Melo by stacit misto vyjimky http://api.dibiphp.com/…sql.php.html#134 doplnit neco takovehoto:

$data = dibi::query('SELECT @@IDENTITY');
return $data->fetchSimple();

PS: pisu to z hlavy takze mozna tam budou chyby. A mozna by stalo za to osetrit vyhozeni vyjimky u dibi::query()

Editoval phx (9. 11. 2008 15:26)

 

#9 před 4 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5833

Re: LAST_INSERT_ID()

přidám to tam

 

#10 před 4 lety

jansfabik
Člen
Registrovaný: 9. 11. 2008
Příspěvky: 136

Re: LAST_INSERT_ID()

a oracle to taky podporuje:
http://jen.fluxcapacitor.net/…utoincr.html

vytvoření tabulky, sekvence a triggeru:

create table test (id number, testdata varchar2(255));

create sequence test_seq
start with 1
increment by 1
nomaxvalue;

create trigger test_trigger
before insert on test
for each row
begin
select test_seq.nextval into :new.id from dual;
end;
/

vložení záznamu a zjištění aktuální pozice:

insert into test values(test_seq.nextval, 'voila!');

select sequence_name from user_sequences;

ale myslím si, že implementovat tohle do dibi by bylo hodně složité

 

Zápatí