abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:22 | Nová verze

    Podman (Pod Manager), nástroj umožňující vytvářet a provozovat kontejnery, aniž by uživatel potřeboval práva roota, byl vydán v nové major verzi 6.0.0. Přehled novinek v poznámkách k vydání. Řešena je i vážná bezpečnostní chyba CVE-2026-57231.

    Ladislav Hagara | Komentářů: 0
    dnes 00:11 | IT novinky

    Společnost Sony oznámila, že od ledna 2028 přestane vydávat nové hry pro PlayStation na fyzických discích. Všechny budoucí tituly budou dostupné výhradně v digitální podobě na PlayStation Store.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Google Chrome 150 byl prohlášen za stabilní. Nejnovější stabilní verze 150.0.7871.46 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 433 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Nová verze

    Soudní dvůr Evropské unie potvrdil rekordní pokutu 4,125 miliardy eur (100 miliard Kč) americké technologické firmě Google ze skupiny Alphabet. Pokutu firmě v roce 2018 vyměřila Evropská komise (EK) za to, že Google podle ní zneužívá operačního systému Android k potlačení konkurence na trhu vyhledávacích služeb.

    Ladislav Hagara | Komentářů: 17
    včera 12:44 | IT novinky

    Administrativa amerického prezidenta Donalda Trumpa povolila firmě Anthropic obnovit plný přístup klientů k modelům umělé inteligence (AI) Fable 5 a Mythos 5. Ty byly nedostupné bezmála tři týdny kvůli bezpečnostním obavám vlády, třebaže americké ministerstvo obchodu minulý pátek povolilo omezený přístup k modelu Mythos 5 pro některé „důvěryhodné“ domácí organizace.

    Ladislav Hagara | Komentářů: 1
    včera 12:22 | Zajímavý článek

    Francúzska organizácia na ochranu spotrebiteľa, po viac než ôsmych rokoch skúmania, žaluje Epson za plánované zastarávanie tlačiarní. Súd sa začína dnes, 2. 7. 2026, vo francúzskom Nanterre.

    Vlado99 | Komentářů: 5
    včera 03:00 | Zajímavý software

    Erin Catto, autor open source 2D fyzikálního enginu Box2D (Wikipedie), představil nový 3D fyzikální engine Box3D. Engine je již používán ve hře The Legend of California.

    Ladislav Hagara | Komentářů: 0
    včera 01:00 | Nová verze

    Byla vydána nová verze 4.0.0 multiplatformního svobodného frameworku pro zpracování obrazu G'MIC (GREYC's Magic for Image Computing, Wikipedie). Přehled novinek i s náhledy nových filtrů na PIXLS.US.

    Ladislav Hagara | Komentářů: 1
    1.7. 14:22 | Zajímavý článek

    Český statistický úřad (ČSÚ): Průměrná hrubá měsíční mzda ICT specialistů v roce 2025 meziročně vzrostla o 6 % na téměř 100 tisíc korun. Nejlépe placeni byli vývojáři softwaru. Dlouhodobým trendem zůstává nízké zastoupení žen, a to jak mezi specialisty, tak studenty těchto oborů.

    Ladislav Hagara | Komentářů: 15
    1.7. 14:11 | IT novinky

    Ochranný svaz autorský (OSA) připravuje žalobu na společnost Suno, která umožňuje generování hudby pomocí umělé inteligence (AI). ČTK to sdělil předseda představenstva OSA Roman Strejček. Suno podle něj bez souhlasu využívá k trénování svých modelů hudbu autorů, které svaz zastupuje. Nedávný investigativní materiál magazínu The Atlantic ukázal, že firmy jako Suno nebo Udio k trénování modelů používají rozsáhlé databáze obsahující miliony skladeb. V databázích, které časopis zveřejnil, lze dohledat i písně řady českých a slovenských umělců.

    Ladislav Hagara | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (17%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 2038 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: mysqli multi_query náhodně neproběhne

    5.12.2008 17:03 fakenickname | skóre: 42 | blog: fakeblog
    mysqli multi_query náhodně neproběhne
    Přečteno: 608×

    Zdravim,

      pisu takovy maly PHP+MySQL ukolnicek a zasekl jsem se na funkci addTodo() kde pomoci multi_query pridavam do databaze novy zapisek. Problem je, ze pridani do DB probehne jenom nekdy. Nepodarilo se mi vypatrat zadnou souvislost s nicim, zadne pominene chovani, proste uplne nahodne. Kod vypada priblizne takto (zkousim ruzne pokusy aby se to rozbehlo):

        public function addTodo($author, $priority, $deadline, $text, $labels)
        {
            $enteredDate = $this->todayDate();
            $query  = "START TRANSACTION;\n";
            $query .= "SELECT @IDT:=MAX(idtodo)+1 FROM Todos;\n";
            $query .= "SELECT @IDU:=idusr FROM Users WHERE username=\"".$author."\";\n";
            $query .= "INSERT INTO Todos VALUES (";
            $query .= "'0', @IDU, @IDT, '".$priority."', '".$enteredDate."', ";
            $query .= "'".$deadline."', '".$text."');\n";
            $query .= "COMMIT;";

            echo "<pre>".$query."</pre>";
            if ( $this->db->multi_query($query) )
            {
                echo "SQL DOTAZ je OK<br>";
            }
            return true;
        }

    Pri vykonavani ten SQL dotaz vypada napriklad takto:

    START TRANSACTION;
    SELECT @IDT:=MAX(idtodo)+1 FROM Todos;
    SELECT @IDU:=idusr FROM Users WHERE username="demo";
    INSERT INTO Todos VALUES ('0', @IDU, @IDT, '1', '2008-12-05', '2008-1-1', 'oo');

    COMMIT;

    Zkoušel jsem vyloučit data, místo SQL proměnných jsem použil vnořené selecty (to nefungovalo vůbec). Bez transakcí to dělá to samé. Zkoušel jsem všechno co mě napadlo a vážně už nevím (DB master zrovna nejsem).

     

    Poznámky:

    • problém je s nějvětší pravděpodobností ve funkci addTodo()

    • $this->db->multi_query($query) je vždycky úspěšná (vždy vrátí TRUE) ať už se nový záznam v DB objeví nebo ne
    • provádění SQL dotazu v phpMinAdmin je vždy úspěšné a vždy správně zapíše do DB nový záznam
    • všechny ostatní dotazy jako smazání zápisku, změna nějaké vlastnosti zápisku (done/undone), ověření jména a hesla vždy dopadnou správně, tohle je jediný problém s db v celém projektu

     

    Jako PHP používám PHP 5.2.7 with Suhosin-Patch 0.9.6.3, Apache 2.2.10, browser Firefox3, distro Archlinux

     

    Díky moc za jakékoliv rady

     

     

     

    Odpovědi

    5.12.2008 17:12 fakenickname | skóre: 42 | blog: fakeblog
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne

    Možná jsem zle vyjádřil chování. V praxi tohle: dám F5 a znovu pošlu data z formuláře do controlleru, ten je dá DB a ta je zapíše do DB. Vždycky všechno proběhne v pořádku (funkce mysqli hlásí úspěch), ale když ve vedlejším okně nechám vypsat tabulku, tak se nezmění. Dám znova F5, pošlu úplně ta samá data, úplně identický SQL dotaz, jen o pár vteřin poté a data se objeví v DB. Někdy musím dát F5 (znovuposlání dat) třeba i čtyřikrát, někdy je to okamžitě, ale nemá to žádný časový nebo množstevní charakter). Jen doufám, že je to nějaký typický newbie trap.

    5.12.2008 18:06 fakenickname | skóre: 42 | blog: fakeblog
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne
    Hmmm, tak to přecejenom byl newbie trap..

    It's very important that after executing mysqli_multi_query you have first process the resultsets before sending any another statement to the server, otherwise your socket is still blocked.

    Please note that even if your multi statement doesn't contain SELECT queries, the server will send result packages containing errorcodes (or OK packet) for single statements. (-- http://cz2.php.net/manual/en/mysqli.multi-query.php)

    Škoda, že sem si ty komentáře nečetl dřív a pozorněji..
    default avatar 5.12.2008 23:41 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne
    SELECT @IDT:=MAX(idtodo)+1 FROM Todos;
    SELECT @IDU:=idusr FROM Users WHERE username="demo";
    INSERT INTO Todos VALUES ('0', @IDU, @IDT, '1', '2008-12-05', '2008-1-1', 'oo');
    

    Boha jeho!

    6.12.2008 10:09 Karel Borkovec | skóre: 28 | blog: HP_NX9010 | Tábor
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne

    Určitě by bylo lepší rovnou napsat co máš přesně na mysli ;-)

    Používat max() pro nové ID je nesmysl. Když někdo jiný v tu chvíli vloží jiný záznam, tak data nebudou konzistentní.

    V MySQL použij auto_increment, v DB systémech, kde auto_increment není se používá sequence a trigger (např.).

    7.12.2008 01:15 fakenickname | skóre: 42 | blog: fakeblog
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne
    je to jenom vysek relevantnich casti komplikovanejsiho sql dotazu. pro rucni vytvareni noveho ID mam svoje dobre duvody
    6.12.2008 10:27 depka | skóre: 20 | blog: eterity
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne

    btw: transakce je zbytecna, pro nove id pouzij jiz zminovany auto_increment a pro zjisteni id toho druheho vnoreny poddotaz a budes to met vsechno v jenom dotazu

    6.12.2008 11:41 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne
    A že se ještě nikdo nezmínil o vytváření SQL dotazů skládáním řetězců…
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    okbob avatar 8.12.2008 11:16 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne

    Uz jsem rezignoval - na to kazdy musi prijit sam

    10.12.2008 23:33 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: mysqli multi_query náhodně neproběhne
    Hint: PHP

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.