IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Diskuze: Sestavení komplikovanější transakce v php a mysql

Aktivity
Avatar
martinkobelka
Tvůrce
Avatar
martinkobelka:26.2.2015 21:03

Zdravím

Začnu stručně. tento zdrojový kod se mi neprovede. Když ale vypsaný dotaz vložím do admineru a nechám ho provést je vše v pořádku tak v čem může být problém ?

$dotaz = "
                    START TRANSACTION;

                    INSERT INTO ankety (nazev, id_uzivatele)
                    VALUES ('$jmeno', $id_uzivatele);
                        ";
                foreach ($polozky as $polozka) {
                    $dotaz .= "
                        INSERT INTO odpovedi_moznosti (id_ankety, moznost)
                        VALUES (
                            (SELECT id_ankety FROM ankety WHERE nazev = '$jmeno'),
                            '$polozka');


                    ";

                }
                $dotaz .= "COMMIT;";
                echo $dotaz;
                if(mysql_query($dotaz)){
                    echo "vše je ok";
                }
                else{
                    echo "nic není ok";
                }

Děkuji za odpověď

 
Odpovědět
26.2.2015 21:03
Avatar
shaman
Člen
Avatar
Odpovídá na martinkobelka
shaman:26.2.2015 22:49

Predpokladam ze ti vypisuje nic neni ok. V takom pripade ti zlyhalo query. Skus tu podmienku rozbit takto

...
$dotaz .= "COMMIT;";
mysql_query($dotaz) or die('error: ' . mysql_error());
echo "vse je ok";

Ak ti ta query zlyha tak ti vypise aj error preco a skript skonci,
Ak nezlyha, tak uvidis vse je ok

Nahoru Odpovědět
26.2.2015 22:49
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na martinkobelka
David Hartinger:26.2.2015 23:01

Takhle se transakce vůbec nedělají a je to navíc dost nebezpečné, protože pochybuji tom že někdo hlídá aby se ti to nezaseklo. Použij PDO.

Nahoru Odpovědět
26.2.2015 23:01
New kid back on the block with a R.I.P
Avatar
Pavol Hejný
Tvůrce
Avatar
Odpovídá na David Hartinger
Pavol Hejný:10.3.2015 0:29

Já mám na transakce funkci(využívající PDO), do které se vloží pole SQL dotazů. Začne se commitem a pokud nastane chyba nebo jiná událost na serveru provede se rollback. Vše běží hezky automaticky.
BTW:
Pokud se neprovede rollback nebo commit a nechá se transakce otevřená, tak se může DB pěkně seknout a pak je často potřeba celou DB restartovat.

Nahoru Odpovědět
10.3.2015 0:29
/^(web )?(app )?developer$/
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 4 zpráv z 4.