Autor | Zpráva | ||
---|---|---|---|
Josef Burger Profil * |
#1 · Zasláno: 1. 6. 2011, 21:25:36
ahoj,
mám problém s PHP. Vytvářím knihovnu pro práci s databází. Skript mi ale u funkce s dotazem vypisuje tuto hlášku: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261904 bytes) in C:\xampp\htdocs\MyCMS2\system\lib\c_mysql2.php on line 36 kód na 36. řádce: public function query($sql) {$this->query($sql);} celé to je ve třídě, před tím je jen funkce connect Nevíte kde by mohl být problém? |
||
pcmanik Profil |
#2 · Zasláno: 1. 6. 2011, 21:27:44
Josef Burger:
Je to tam jasne napisane, skript potrebuje viac pamete RAM ako je dostupne. |
||
Josef Burger Profil * |
#3 · Zasláno: 1. 6. 2011, 21:30:27
pcmanik:
to jsem si dokázal přeložit, ale díky jen mi neni jásné proč chce skript více paměti, když například nepracuji s obrázkem :-/ proto se ptám, kde by mohl být problém |
||
Alphard_ Profil * |
#4 · Zasláno: 1. 6. 2011, 21:31:47
Pokud se nesnažíte načíst do paměti hodně velkou tabulku, pravděpodobné je chyba v té vaší knihovně (alokuje si pro sebe moc místa, možná zacyklení). S touto chybou jsem se setkal jenom při práci s obrázky. U databáze je to neobvyklé, něco je špatně.
|
||
Kcko Profil |
#5 · Zasláno: 1. 6. 2011, 21:32:46
public function query($sql) {$this->query($sql);} To je celý kód? Vypadá to jak nikdy nekončící smyčka. |
||
Josef Burger Profil * |
#6 · Zasláno: 1. 6. 2011, 21:36:28
Kcko:
celý kód: class db extends mysqli { function __construct() ..... další zpracování public function query($sql) {return $this->query($sql);} } $db->connect(); $a = $db->query("SELECT ....."); |
||
Alphard_ Profil * |
#7 · Zasláno: 1. 6. 2011, 21:39:32
Josef Burger:
Tak to Kcko uhádl. Nekonečná rekurze. |
||
Josef Burger Profil * |
#8 · Zasláno: 1. 6. 2011, 21:41:25
to znamená?? - vůbec netuším, kde je chyba
|
||
YoSarin Profil |
#9 · Zasláno: 1. 6. 2011, 21:41:49 · Upravil/a: YoSarin
To znamená že metoda query volá metodu query, která volá metodu query, která volá metodu query, která ... Fatal error: Allowed memory size of 134217728 bytes exhausted
|
||
Josef Burger Profil * |
#10 · Zasláno: 1. 6. 2011, 21:43:14
širší jak? jako připojení k db?? TAm to chybu neukazuje
jinak tam nic nemam :-/ |
||
Josef Burger Profil * |
#11 · Zasláno: 1. 6. 2011, 21:54:29
zde je celý kód: Odkaz
|
||
YoSarin Profil |
#12 · Zasláno: 1. 6. 2011, 22:02:05
Já se omlouvám - měl jsem tu stránku otevřenou příliš dlouho a po poslání komentáře už tam byly dva nové, které ten problém přesně identifikovaly. Neukončená rekurze znamená, že: metoda query volá metodu query, která volá metodu query, která volá metodu query, která -> Fatal error: Allowed memory size of 134217728 bytes exhausted
|
||
Josef Burger Profil * |
#13 · Zasláno: 1. 6. 2011, 22:04:01
a to znamená? vůbec tomu v tuto chvíli nerozumím :-/
|
||
YoSarin Profil |
#14 · Zasláno: 1. 6. 2011, 22:05:43
To znamená že ta funkce volá pořád dokola stále sama sebe a nemá se jak ukončit - proto běží tak dlouho, dokud nezaplní paměť - poté co zaplní paměť tak vyskočí ta chyba co tě trápí...
|
||
Josef Burger Profil * |
#15 · Zasláno: 1. 6. 2011, 22:07:19
jo aha :-) .. díky :-D
to mě nenapadlo :-/ Díky moc |
||
Mike8748 Profil |
#16 · Zasláno: 1. 6. 2011, 22:11:47
v kodu
public function query($sql) {$this->query($sql);} ty potřebujes volat metodu query na rodiči tvoji třídy, proto parent:: když použiješ $this, tak se bude volat metoda te tvojí třídy, protože má stejné jméno. a tak pořád dokola dokud nedojde paměť |
||
Kcko Profil |
#17 · Zasláno: 1. 6. 2011, 23:09:34
Josef Burger
Tato třída není moc k užitku, silně doporučuji prozkoumat a poté užívat zavedený DB layer od Davida Grudla. DIBI Já bych nechtěl již nic jiného. Alphard: Tvoje intuice to odhadla ještě dříve, získáváš 1 bludištáka ;]] |
||
Časová prodleva: 13 let
|
0