[MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Zdravte,
tak jsem si rozbehl MySQL 5.0.22-community-nt, k tomu mam Apache 2.2.3 a PHP 5.2.1. A mam nasledujici problem:
v databazi mam nekolik ulozenych procedur. Pomoci nastroje SQLyog je mam odladene a funguji ok.
Pokud je zavolam v php, tak dalsi sql dotaz po zavolani ulozene procedure mi skonci hlasenim:
2013 Lost connection to MySQL server during query
Ovsem MySQL server nespadne ani ve spravci uloh neni videt ze by byl nejak zatizen...
Co jsem googlil, tak je asi problem v php. Nasel jsem radu, abych volal po kazdem zavolani ulozene procedury funkci mysql_free_result na vysledek dotazu, ale to taky nepomaha.
Mate s tim nekdo zkusenosti?
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
V PHP byly dve moznosti v connection myslim, nejake docasne a trvale, zkousel jsi obe moznosti ? Predpokladam, ze kdyz po zavolani procedury opet provedes mysql_connect, tak to jde, ale to asi neni systemove reseni pokazde volat nove spojeni, ze ? Nevim jak u mySQL, ale v Sybase to strasne kravilo, kdyz clovek nedal do $result = @sybase_query($query), kde $query bylo volani procedury ten zavinac, dely se pak fakt divne veci na outputu, pritom procedury byly take v poradku.
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Hod sem priklad procedury a priklad volani po te procedure...
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Kdyz jsem sem chtel poslat priklady co a jak volam tak jsem zjistil, ze problem je v teto procedure:
Kód:
CREATE PROCEDURE `getcompaniescount`(userid int)
BEGIN
SET @t = companytable(userid);
SET @s = CONCAT('SELECT COUNT(company) AS maxcount FROM ',@t);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
Kód:
CREATE FUNCTION `companytable`(userid int) RETURNS varchar(50)
BEGIN
IF (canviewall(userid)='1') THEN
RETURN 'showallcompany';
ELSE
RETURN 'showcompany';
END IF;
END$$
Poznamky:
- showallcompany a showcompany jsou dva pohledy na tabulku companies, ve ktere mam ulozene firmy. Jeden vraci jen viditelne a druhy vsechny firmy z tabulky companies.
- kdyz odstranim radek EXECUTE stmt; z te prvni procedury, tak mi vse funguje.
- kdyz tuhle proceduru volam z SQLyog, tak zadny problem neni.
Jeste, z php to volam takto:
Kód:
mysql_connect("localhost","user","",65536);
mysql_select_db("databaze");
$res = mysql_query("CALL getcompaniescount('1');");
$row = mysql_fetch_object($res);
mysql_free_result($res);
Zkusim o tom jeste neco zatim vygooglit.
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Tak jsem to jeste zkusil otestovat pod linuxem
MySQL: 5.0.32-Debian_3-log
Verze MySQL klienta: 5.0.30
PHP 5.2.0-8
Po volani "Call getcompaniescount('1');" a naslednem zavolani jakehokoli dalsiho dotazu mi to pro zmenu hodi hlasku 2014 Commands out of sync; you can't run this command now
Zkousel proceduru jeste zjednodusit
Kód:
CREATE DEFINER = `root`@`localhost` PROCEDURE `getcompaniescount` ( userid int ) DETERMINISTIC
BEGIN
PREPARE xtab FROM 'SELECT "aaaa"';
EXECUTE xtab;
DEALLOCATE PREPARE xtab;
END$$
A porad to same :( Mohl by to pls nekdo ozkouset?
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Tak uz jsem se to castecne vyresil.
Kdyz na zacatku php skriptu zavolam jakoukoli ulozenou proceduru, ktera nepouziva EXECUTE, tak pak vse funguje.
Zvlastni :rolleyes: :confused: :eek:
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
zkusil si mysql_pconnect ? peristent, trvajici spojeni
glo
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Citace:
Původně odeslal
Glottis
zkusil si mysql_pconnect ? peristent, trvajici spojeni
Ani tohle nepomaha.
A jeste mam jeden poznatek, kdyz ten dotaz, ktery volam pomoci EXECUTE, je slozity (obsahuje GROUP, JOIN atd), tak to taky padne. :confused:
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Bohuzel stale aktualni tema :/
Pls zkusil byste to nekdo u sebe? Zavolat z php ulozenou proceduru v mysql, ktera ma v sobe volani "EXECUTE nejaky_prikaz", a vyzkouset zda vas to na dalsim sql dotazu odpoji od mysql.
Budu vam zavazan
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Tak uz jsem prisel na to cim to vsechno je. Pro MySQL verze vyssi nez 4, je potreba pouzivat rozsireni mysqli, pak uz jde vse ok. Rozsireni mysql podporuje jen nizsi verze MySQL...
Re: [MySQL & PHP] Stored Procedures => Ztrata spojeni s MySQL
Konkretni problem je v tom, ze MySQL pri zavolani stored procedury (mozna i funkce) vrati jednak vysledek toho nejakeho selectu co se provadi v ulozene procedure a pak druhy vysledek a to, zda behem vypoctu nedoslo k nejake chybe. Takze vlastne po zavolani ulozene procedury je potreba odebrat od MySQL dva vysledky a k tomu rozsireni mysql nema prostredky...
To jen tak pro info :)