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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

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

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 1
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 24
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 785 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 494×

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: 37 | Praha
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.