Autor Zpráva
Dědekk
Profil *
Ahoj, neví někdo jak se jmenuje ta funkce které provede sql dotaz ale fyzicka data nevloží, nepřepíše, nesmaže atd.. jen vrátí jestli je všechno ok a požadovaný sql dotaz jde bez chyby vykonat.. Dlouho jsem ji nepoužíal a teď ji nemůžu najít..... Díky za pomoc
Spectator
Profil
Kontrola SQL dotazů?
Dědekk
Profil *
Spectator:

Co? Nechápu na co se ptáš;) Můžeš to upřesnit?
Tori
Profil
U DELETE/UPDATE jde použít LIMIT 0. Na INSERT a SELECT jsem viděla radit buď udělat dočasnou kopii tabulky a zkoušet to na ní, nebo transakce + rollback - ani jedno není moc šikovné. To, co jste používal, byla nějaká spec.funkčnost DB vrstvy, nebo co?
Dědekk
Profil *
Tori:
já mám pocit, že to bylo za použití transakce ale už si nemůžu vzpomenout jak se to aplikuje. Vím, že se to nějak vkládalo před sql dotaz nebo do něj.. fakt nevím a z toho manuálu zde nejsem vůbec chytrej :(
Majkl578
Profil
O transakcích se píše v dokumentaci MySQL. Podporují je pouze tabulky typu InnoDB.

START TRANSACTION;
...
...
COMMIT;
Joker
Profil
Dědekk:
mám pocit, že to bylo za použití transakce ale už si nemůžu vzpomenout jak se to aplikuje. Vím, že se to nějak vkládalo před sql dotaz nebo do něj
Nebyl to náhodou ROLLBACK?
Ten zruší celou transakci, takže by to fungovalo asi jako je popsané v prvním příspěvku.
Dědekk
Profil *
Joker:
Můžeš prosím uvést názorný přiklad jak by to mohlo vypadat? Moc děkuji
K
Profil *
mozna ze jsem uplne mimo, ale nemyslis nahodou EXPLAIN?
Bertram
Profil
Pokud jde pouze o to, má-li úprava a odstraňování záznamů správné podmínky, tak se stejnými podmínkami použij SELECT a porovnej jestli jsou to ty záznamy které chceš mazat/upravovat.
Joker
Profil
Dědekk:
Můžeš prosím uvést názorný přiklad jak by to mohlo vypadat?
Viz [#6] Majkl578, jen místo COMMIT by tam bylo ROLLBACK.
COMMIT potvrdí (provede) transakci, ROLLBACK ji zruší.
Ale (jak píše i Majkl578) u MySQL to bude fungovat jen na tabulkách podporujících transakce, tj. InnoDB.
Dědekk
Profil *
Joker:
Ale (jak píše i Majkl578) u MySQL to bude fungovat jen na tabulkách podporujících transakce, tj. InnoDB.
A jde to nějak zjistit jestli moje tabulka podporuje transakce, tedy již zmiňované ono InnDB ?

Když dám

     mysql_query("START TRANSACTION");

     $sql = "UPDATE over SET status = 88 WHERE user = 10";

     $mysql_query = mysql_query($sql);

          if ($mysql_query === false) {

               echo "CHYBA";

          } else {

               echo "ÚSPĚCH";

          }

     mysql_query("ROLLBACK");


tak se vypíše ÚSPĚCH ale v mysql se niz nepřepíše ;)

Díky
Joker
Profil
Dědekk:
A jde to nějak zjistit jestli moje tabulka podporuje transakce, tedy již zmiňované ono InnDB ?
V phpMyAdminu se to jmenuje typ tabulky, bývá to MyISAM nebo InnoDB.

Jde to zjistit i dotazem do databáze information_schema, zhruba nějak takhle:
SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='název databáze' AND TABLE_NAME='název tabulky'
Dědekk
Profil *
Joker:
Tak je to přesně tak, pokud je uložiště jako MyISAM tak to nejde a pokud je uložiště nastaveno jako InnoDB tak to šlape parádně. Jenže by mě zajímalo, jestli je normální používat uložiště InnoDB pro celou DB?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0