Diskuze: MySQL - návrat z dotazu + tabulka errorů
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 30 zpráv z 30.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Databáze ti určitě ty chyby někam loguje. Ve starém mysql ovladači byla funkce mysql_error, kde byla zapsaná chyba jako string. Jak je to třeba v PDO nevím, ale určitě tam něco podobného také bude.
Co kdyby sis to vyzkoušel? Výstupem je numerický kód, pětiznakové označení chyby a text chyby. S tím už se snad dá něco dělat. Můžeš si generovat i vlastní chybová hlášení.
Predpokladam v PHP. Pokud pouzivas mysqli tak zkontrolovat uspesnost dotazu a na zaklade toho pouzit http://www.php.net/…li.errno.php
Chybové hlášky nepatří do switch/pole, ale do databáze, protože stejné chybové hlášky databáze mohou mít rozdílné významy pro aplikaci. Navíc v databázi můžeš mít ty chybové hlášky lokalizovány do libovolného jazyka.
Mě je to v databázi na nic. Potřebuji si to poslat QueryStringem. Program pak jen QueryStringem pošle akci a návrat dostane v redirectu. Nebude muset udělat jiného, než zparsovat URL... (Oproti parsování HTML dosti rozdíl.)
@HellCoder@
Přesně to jsem potřeboval - děkuji!
"Returns the last error code for the most recent MySQLi function call that can succeed or fail."
A kód si pěkně pošlu QueryStringem...
Tak si pošli jen ten pětiznakový stavový kód. Ten se parsuje velmi dobře.
Aha. No - tak asi tak. Mohu z tohohle dostat error:
if(mysqli_num_rows(mysqli_query($connection, "SELECT ico FROM licence WHERE ico=$ico AND product='$product' AND value='{$_GET["lics"]}'")) == 1)
?
Tedy nejlepší by bylo, kdyby dotazy způsobily pád programu. To asi nepůjde - že? (Chytat to někde dolejc.) Takto musím zavírat spojení a zavolat prázdný return. A vůbec se to blbě spravuje. Každopádně z uvedené podmínky by se nedal vytřískat nějaký "Row no found" error? (Na provedení mi nezáleží - hodnoty řádku mám všechny - a všechny se musí shodovat...)
$prep = $pdo->prepare("SELECT ico FROM licence WHERE ico=? AND product=? AND value=?");
$prep->execute(array($ico, $product, $_GET["lics"]));
if ($prep->rowCount() == 0)
throw new Exception("licence nenalezena");
... a máš to i se zhroucením
Sekundární zhroucení neřeší zprasení kódu větvením... Je to opravdu dost nepřehledné - a čeká mě ještě více tabulek - tedy ještě další vlna větvení...
Jaké větvení? Žádná větev else se tam nevyskytuje.
Jaké další tabulky? Vždyť to všechno můžeš udělat v tom jednom SQL dotazu.
Těžko. Porovnávám asi 6 možných variant. (zadal ičo - nezadal, zadal - co chce?, chce přidat - už tam je?, není - chce přidat produkt?) (ico sloupec má primární klíč - null hodnota by pěkně zazpívala error) Pročež else je tam tuny. Ano - přeháním - jen 4. Ale i tak by bylo mnohem přehlednejší, kdby nenastalo else, ale kód by dál neběžel...
Jinak - ano - dotazy budu shlukovat, ale stejně se mi tento přístup nelíbí. Tedy proč si PHP prvně error chytí a já jako blb musím vyslat žádost o získání statusu?
Viz. edit. Jedno, jestli PHP nic nechytá a jen čte logy - nebo jak ty statusy sbírá - prostě proč je neposlat nejjednodušší cestou. Kdo by error nechtěl, použije obecný catch...
Jaký error? K žádnému přece nedošlo. Když k němu dojde, tak se zpracování ukončí. Když počet výsledků == 0, tak se také ukončí.
Pořád nechápu, o co se snažíš. Získal ji ICO. Budeš ho k něčemu potřebovat? Vždyť ho máš v podmínce.
Tak snad mě chápeš - ne? Prostě bych byl raději, kdyby ke mě rovnou chodily statusy z databáze. Tedy to o co si musím žádat mysqli_sqlstate(), či jinak... (dal bych si pěkně catch(co))
K IČo (U?) - a co když si ho uživatel vymyslel a já takového usera nemám?
Kromě toho je ICO v daném případě hodně nešťastně zvolený primární klíč. Co když bude firma mít víc produktů nebo víc licencí?
Chápu, že když není žádný záznam nalezen, tak chyba to není.
Proto mám více tabulek. Jedna tabulka obsahuje dvojici - ico produkt. Každý produkt lze registrovat jen pod jedinou licencí - a musí k tomu sedět ico... (produkt se přidá jen když v tabulce licencí naleznu řádek se stejným IČem, produktem a liecnčním číslem...) Identifikační číslo organizace musí být jedinečné...
Primární klíč musí být jedinečný. Pokud může mít firma víc produktů nebo víc licencí, tak ti to fungovat nebude.
Funguje mi to dokonale. Mám tabulku ico produkt. Tam není nic primárního. Je to jen odpaďák. Dostat se tam však dá jedině opravdu dost složitě - takže nehrozí žádné nebezpečí. Nemám čas - musím jít. Ale ujišťuji tě, že to funguje dokonale a šéf je z toho na větvi... (skáče do nebes)
(Ve zbylých 3 tabulkách je ico sloupec primárním klíčem omarkován...)
Uvědom si, že IČO je cizí klíč, Skutečně máš vazbu na databázi firem 1:1 ?
Funguje to. Je to otestované. Produkt se dá přidat jen při shodě
licence. Takže se nedá přidat neplatícímu uživateli. Dále ico produkt
tabulka je jak jsem psal - jen odpad. Tam se nic nevaliduje, nic neřeší. Pak
tu máme tabulku ico, produkt, max, který omezuje počet daného produktu na
IČO. Fakt již musím jít - tak za 4 hodiny se zase pohádáme... 
Zobrazeno 30 zpráv z 30.
