Zdravím, chtěl bych se zeptat jestli je zapotřebí v php ošetřovat všechnu práci s DB. Například udělám SELECT, kde testuji chybový stav, v tom někde něco poupravím, udělám další SELECT z jiné tabulky, opět otestuji a pak udělám UPDATE a znovu testuji. Podobně dělám i 5 dotazů. Nakolik je zapotřebí každý dotaz ověřit zda se vykonal?
Fórum › MySQL
Ošetření chyby dotazu
#1 Pavelv
Obecně řečeno bys to ověřovat měl. Prakticky to stejně budeš mít zapouzdřeno v nějaké metodě, takže tě to moc trápit nemusí. Dobře se přitom dají využít výjimky - selhání dotazu vůbec nemusíš testovat.
Na druhou stranu je podivné, proč děláš 5 SQL dotazů za sebou. Pro každou operaci by měl stačit jeden. Proč máš 2× SELECT a za ním UPDATE? Z databáze buď jen čtu, anebo jen do ní zapisuji. Současně to nemá význam - koleduješ si o race condition neboli souběh. Udělej to jedním SQL dotazem.
#3 Mixxy
Transakce se udělá automaticky, pokud celý požadavek nacpeš do jednoho SQL dotazu. Domnívám se, že v uvedeném případě to nebude nic obtížného. Transakce bych nechal na složitější případy.
#8 Kit
teď se k tomu nedostanu, ale něco ve smyslu
if(mysql_result(mysql_query("SELECT COUNT(*) FROM uzivatele WHERE login = '$login'"),0))
mysql_query("UPDATE uzivatele SET pass = '$heslo'");
$vysl = mysql_query("SELECT Jmeno,Prijmeni FROM klienti WHERE IP = '$ip'");
#9 Pavelv
Tak to jsou dva SQL dotazy, které spolu nesouvisí. Takže se dá sloučit jen SELECT a UPDATE
UPDATE uzivatele SET pass = '$heslo' WHERE login = '$login'
SELECT Jmeno,Prijmeni FROM klienti WHERE IP = '$ip'
Kromě toho v tom svém UPDATE máš chybu. Určitě nechceš měnit heslo všem uživatelům :)
Tyto dva SQL dotazy by se však neměly vyskytovat pohromadě, protože buď chceš někomu měnit heslo, anebo chceš vypsat klienta s určitou IP adresou. Nikdy obojí současně.
#12 Kit
Ano, ale proměnná $login vždy obsahuje správné jméno, které na vstupu zkontroluji pomocí preg_match
$vysl =
mysql_query("select id, ugroup from uzivatele where login = '$login' and heslo = '$sha1pw'") if(mysql_num_rows($vysl == 1)) // uzivatel je prihlasen { ...
mysql_query("UPDATE uzivatele...
...}
#15 Pavelv
Pokud je podmínka splněna, tohle UPDATE změní všechny záznamy v tabulce.
Tak si to konečně zkus. Vlož dva různé uživatele a jednomu změň heslo tím svým příkazem.
#16 Kit
Zkoušeno, dva stejný uživatelé různá hesla, různé uživatelé a stejná hesla...
UPDATE uzivatele
SET heslo = '".hash("sha256",$heslo_new.$login.$ocasek,false)."'
WHERE login = '".$login."'
AND heslo = '".hash ("sha256",heslo_old.$login.$ocasek, false)."'
if(mysql_result(mysql_query("SELECT COUNT(*) FROM uzivatele WHERE login = '$login'"),0))
mysql_query("UPDATE uzivatele SET pass = '$heslo'");
Je to strašně nešťastné řešení, ale je tam :-)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Ošetření chyby při načítání formuláře v VB.NET — založil Dev
Osetreni chyby kdyz uzivatel nic nezada a stiskne enter — založil pinguin
Chyby ve Visual c++ — založil VSc
Odhalení chyby — založil MiCizek
Moderátoři diskuze