Autor Zpráva
toníkTon
Profil *
Ahoj, měl bych dotaz zda používat fetch nebo fetchAll z PDO. Když mi databaze vrací výsledek načítá se vše do paměti?
Na stackoverflow jsem našel že se to dá ovlivnit tímto:

Výchozí nastavení je že se to všechno uloží do paměti?

Na hostingu mám PHP memory_limit 128 MB, to je ta paměť? Když mám třebas 5 článků o velikosti 0,13 mb, tak mi zbývá ještě 127,87mb, nebo se jedná o něco jiného?

$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
kde jsou ale potom data uložené když použiju toto nastewveni společně s fetch? Na mysql serveru? Po jakou dobu? Neni to pak naopak pomalejší?
pcmanik
Profil
toníkTon:
Zbytočne sa tým nezaťažuj. Reálne pri takýchto veciach na limity nenarazíš. Tvoj uvedený výpočet je takmer správny, lebo neberie v potaz samotnú réžiu PHP a PDO.
Spotrebu RAM v PHP si vieš zistiť funkciou memory_gey_peak_usage.

Fetch používaj v prípade ak chceš jeden riadok, fetchAll ak všetky, takže tu na výber nemáš. FetchAll nepotrebuješ ak si nechceš výsledky ukladať do poľa, alebo objektu.
Iterovať môžeš priamo PDOStatement, ktorý vracia metóda query, resp. prepare.
toníkTon
Profil *
jde o to že potřebuju vytáhnout ID prvníhoi vráceného a posledního vráceneho. s fetchall bych to mohl udělat $odpoved[0] a $odpoved[$stmt->rowCount() - 1]; a jenom z fetch bych musel napsat něco takového.
$i = 0;
while ($odpoved = $stmt->fetch()) {
if ($i == 0) {
$prvniID = $odpoved->ID;
}
$posledniID = $odpoved->ID
$i++;
}

nebo se s tim fetch dá přesunout na začátek a na konec?


memory_get_peak_usage(true) - a co znamená to true a bez true?


když chci zjistit kolik mi to zabírá Tak to musím dát úplně nakonec?
pcmanik
Profil
toníkTon:
Ak potrebuješ len idečka a nie samotné dáta, tak ti stačí SQL.
SELECT MAX(id) AS max_id, MIN(id) AS min_id FROM tabulka

Aj pri fetch sa dá posúvať interný kurzor, ale jednoduchšie je fetchAll(). Na žiadny problém nenarazíš, snaď len keby si načítal milión záznamov naraz...

memory_get_peak_usage(true) - a co znamená to true a bez true?
V dokumentácii je to napísané. Daná funkcia vracia peak = maximálnu hodnotu ktorá bola počas behu skriptu alokovaná. Áno na koniec skriptu.

Alebo pomocou https://stackoverflow.com/a/16245036 si zistíš len veľkosť obsahu danej premennej.
Ako vravím riešiš to zbytočne a na žiadny problém reálne nenarazíš.

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