Autor Zpráva
MichalM
Profil
Zdravím všechny, jsem tu nový a tak dovolte abych se představil. Jmenuji se Michal Michna, jsem student VŠ a tento web sleduji již velmi dlouhou dobu a byl pro mne vždy velmi inspirativní. V posledním čase jsem se začal více do hloubky věnovat webovým technologiím a narazil jsem na následující problém:

Pracuji s MySQL (5.0.51a) databází pomocí phpMyAdmina (3.1.3). Chtěl jsem vyzkoušet novinku MySQL 5 a to Stored Procedures. Našel jsem kód procedury pro správu stromové struktury za pomoci PTT (Preorder Tree Traversal) algoritmu. Proceduru jsem uložil do databáze a pokusil ji vyvolat z phpMyAdmina, vypada chybová hláška:

mysqli #1312 - PROCEDURE can't return a result set in the given context

Dozvěděl jsem se, že je potřeba ještě nakonfigurovat PMA, aby při připojování k databázi nastavil jeden z parametrů na konkrétní číslo. Po této úpravě již chyba nevyskakuje, ale procedura se při volání z PMA neprovede celá (podle výsledku v tabulce), a místo aby se výsledek dotazu ukázal v okně PMA prostě se načte výchozí stránka s databázemi. Vypadá to tedy na nějaký problém se zpracováním samotné procedury. Jinak při volání procedury přímo z CLC MySQL databáze se provede bez problémů.

Děkuji předem za Vaše rady a náměty.
Sqlitator
Profil *
Ukaž jakým kódem tu proceduru voláš.
Kajman_
Profil *
Co zkusit něco jiného než pma... třeba mysql query browser
http://dev.mysql.com/downloads/gui-tools/5.0.html
MichalM
Profil
Ukaž jakým kódem tu proceduru voláš.

proceduru volám přímo z PMA a to dotazem:

CALL NestedTree( 'web_tree', 'id', 'parent_item' );
MichalM
Profil
[to #3]

Díky moc za tip, zrovna to zkouším a vypadá to perfektně, akorát si na to asi jen musím zvyknout. Doufám ale že ty stored procedury půjdou volat z PHP když to budu volat ve skriptech. Ještě to musím vyzkoušet.
MichalM
Profil
Tak mé investigativní hledání mě zavedlo k těmto závěrům:

- po úpravě zmiňovaných na různých stránkách tak aby šli volat uložené procedury z PHP se procedura provede jen částečně
- v konzoli to funguje ok
- v mysql query browseru to je také v pořádku
- vyzkoušel jsem i něco jiného než volání z PMA a tak jsem vytvořil přímo skript jen pro položení dotazu, výsledek stejný - provede se jen část
- zkusil jsem upgradovat na posledni verzi MySQL Clienta pro php, protože mám podezření že na vině je on. Beze změny.
- mysql nebo mysqli není rozdíl, teda až na to že mysql se musí inicializovat magickou konstantou
- při volání procedury z konzole MySQL se provede, avšak je vypsán jeden warning Note (Code 1051): Unknown table 'tree', je možné že to má souvislost s pádem MySQL Clienta pro php v polovině prováděné procedury

Správa stromové struktury na základě zaslání jednoho dotazu do databáze na místo několika desítek se mi zdá velmi efektivní, hlavně co se týká zátěže. Pro ty co se chtějí věnovat pátrání po této chybě posílám odkaz na stránku s procedurou:

http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html#nested_set_model

Jedná se o proceduru Listing 10

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: