Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
maxijoey
Člen
Avatar
maxijoey:6.7.2019 9:35

Ahoj. Jde mi o jednu věc. Spíše teorie. Mám metodu, která ukládá nějaká data do DB. Řekněme že provede třeba 6 různých INSERTů. Mezi nimi si ale občas do Db taky sáhne pro něco. Modelově:
INSERT data1
INSERT data2
INSERT data3
SELECT data3
INSERT data3 data4
INSERT data5
INSERT data6

Typicky vytvořím záznam v insert data3 a potřebuji jeho id pro dalši insert třena jinam. Provede se to ale korektně když to uzavřu do transakce? Vím že data se nějak neuloží dokud to necomitnu. Bude tedy ten SELECT fungovat a vrátí správná data?

Snad to popisuju dobře o co mi jde.

Zkusil jsem: Viz výše

Chci docílit: Viz výše

 
Odpovědět
6.7.2019 9:35
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na maxijoey
Jaroslav Smrž:6.7.2019 22:35

Nejsem si 100% jistý, ale nejspíš to nepůjde. Pokud se v transakci nevykoná nějaký příkaz, měl by se volat rollback. Otázkou je, jak to máš. Jestli se vykoná, ale s null nebo neaktuální hodnotou nebo se nevykoná vůbec. Např získání posledního id by bylo zavádějící.

Editováno 6.7.2019 22:37
Nahoru Odpovědět
6.7.2019 22:35
/* Life runs on code */
Avatar
Patrik Valkovič:6.7.2019 22:50

Ahoj. Pokud to uzavřeš do transakce, tak ty uvidíš ty inserty, ale nikdo jiný (dokud necomitneš). Pokud ale jeden insert neprojde, tak se v databázi neukáže ani jeden. Jinak ID můžeš získat hned po insertu.
Například takhle https://www.php.net/…nsert-id.php

Nahoru Odpovědět
6.7.2019 22:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
maxijoey
Člen
Avatar
maxijoey:7.7.2019 7:14

Jasně já používám zdejší wrapper, teda už trochu upravený. Takže Id získávám metodou getLastId. Neřeším že by jeden insert selhal. Jde mi čistě jen o to zda to zafunguje správně. Jelikož teoreticky ta data v DB nejsou až do comitu. Tak jestli getLastId vytáhne Id správně v průběhu té transakce.

 
Nahoru Odpovědět
7.7.2019 7:14
Avatar
Odpovídá na maxijoey
Patrik Valkovič:7.7.2019 8:14

Ano, funguje to správně. Ty data uvidíš uvnitř transakce, jen je neuvidí nikdo jiný. Plus lastInsertedId by měla automaticky vracet databáze, takže i kdyby tam data nebyly, ID by bylo správné?

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.7.2019 8:14
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
maxijoey
Člen
Avatar
maxijoey:7.7.2019 9:37

Děkuji :-)

 
Nahoru Odpovědět
7.7.2019 9:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.7.2019 22:19

Co ti brani zkusit poslat 5 insertu v transakci a zopakovat to 3x, pak neco smazat a pridat dalsich 5? Proste to zkusit? A jo, projde to, dela se to. Kdyz budes chtit chyby, tak je mozna rychlejsi insert po insertu bez transakce. Nebo treba po 20 a kdyz to neprojde, insert po insertu.

 
Nahoru Odpovědět
7.7.2019 22:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.