Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
maxijoey
Člen
Avatar
maxijoey:6. července 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. července 9:35
Avatar
Jaroslav Smrž
Redaktor
Avatar
Odpovídá na maxijoey
Jaroslav Smrž:6. července 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. července 22:37
Nahoru Odpovědět  -1 6. července 22:35
I have no idea what it is doing but I´m scared to delete it... xD
Avatar
Patrik Valkovič
Šéfredaktor
Avatar
Patrik Valkovič:6. července 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. července 22:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
maxijoey
Člen
Avatar
maxijoey:7. července 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  -1 7. července 7:14
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Patrik Valkovič
Šéfredaktor
Avatar
Odpovídá na maxijoey
Patrik Valkovič:7. července 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í
+1 bodů
Řešení problému
Nahoru Odpovědět 7. července 8:14
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
maxijoey
Člen
Avatar
maxijoey:7. července 9:37

Děkuji :-)

 
Nahoru Odpovědět 7. července 9:37
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. července 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. července 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.