Avatar
martinkobelka
Redaktor
Avatar
martinkobelka:

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:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na martinkobelka
David Čápka:

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  +1 26.2.2015 23:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Pavol Hejný
Redaktor
Avatar
Odpovídá na David Čápka
Pavol Hejný:

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
http://pavolhejny.cz/
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.