Diskuze: Ověření, zda je již hodnota v databázi
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Osobně oštření duplicit řeším jinak.
Sloupci v databázi nastavím UNIQUE a při insertu/updatu zachycuji v catch()
bloku vyjímku
Může to vypadat takhle nějak:
try {
// insert nebo update do databáze
} catch (PDOException $e) {
if ($e->getCode() == 2300)
$zprava[] = 'Zvolená adresa URL již existuje.';
}
Jak píše Tomáš, jeho řešení je super, jen by kód v bloku catch měl vypadat spíš takto:
try {
// kód, kde se provádí insert, update
} catch(\PDOException $ex) {
if($ex->getCode() === '23000') {
throw new Exception\DuplicateException('Nastala duplicita');
}
throw $ex;
}
Nemá být 2 parametr u queryOne náhodou v poli?
$dbExistuje = Db::queryOne('
SELECT clanky_id
FROM clanky
WHERE url=?
LIMIT 1',
array($url));
Souhlasím, také vyhazuji vlastní výjimky v catch bloku.
Teď ale musí počítat s tím, že mu ta vyjímka probublá výše, takže
musí někte nad touto vrstvou odchtávat DupliciteException a nastavovat
message pro užitatele až tam.
Tak s tím by měl i tak počítat, protože když nenastane integrity constraint, tak může nastat vyjímka jiná a tu i tak musí někde ošetřit (viz. throw $ex). A ještě co se týče kódu, je to 23000 a ne 2300, ale to jsi udělal asi jen překlep
Ano, za chyby se omlouvám, psal jsem to narychlo a nekontroloval to po sobě. Každopádně je toto prakticky nejlepší možné řešení.
Zobrazeno 8 zpráv z 8.