Autor Zpráva
Josef Burger
Profil *
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
Josef Burger:
Je to tam jasne napisane, skript potrebuje viac pamete RAM ako je dostupne.
Josef Burger
Profil *
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 *
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
public function query($sql) {$this->query($sql);}


To je celý kód? Vypadá to jak nikdy nekončící smyčka.
Josef Burger
Profil *
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 *
Josef Burger:
Tak to Kcko uhádl. Nekonečná rekurze.
Josef Burger
Profil *
to znamená?? - vůbec netuším, kde je chyba
YoSarin
Profil
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 *
širší jak? jako připojení k db?? TAm to chybu neukazuje
jinak tam nic nemam :-/
Josef Burger
Profil *
zde je celý kód: Odkaz
YoSarin
Profil
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 *
a to znamená? vůbec tomu v tuto chvíli nerozumím :-/
YoSarin
Profil
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 *
jo aha :-) .. díky :-D
to mě nenapadlo :-/
Díky moc
Mike8748
Profil
v kodu
public function query($sql) {$this->query($sql);}
misto $this-> dej parent::

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
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 ;]]

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0