tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

LAST_INSERT_ID()

před 11 lety

PetrOdut
Člen | 3
<?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)

před 11 lety

phx
Člen | 652

dibi::insertId()

před 11 lety

David Grudl
Nette Core | 6806
$id = dibi::insertId()

před 11 lety

PetrOdut
Člen | 3

diky ;-)

před 11 lety

jansfabik
Člen | 193

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

před 11 lety

phx
Člen | 652

MSSQL: SELECT @@IDENTITY

před 11 lety

jansfabik
Člen | 193

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

před 11 lety

phx
Člen | 652

Koukam, ze David to nema implementovany;)
Melo by stacit misto vyjimky https://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)

před 11 lety

David Grudl
Nette Core | 6806

přidám to tam

před 11 lety

jansfabik
Člen | 193

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é