Disconnect – ukončenie spojenia s db

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
animack
Člen | 19
+
0
-

Ahojte,

ako ukončím databázové spojenie napr. pre

<?php
$database = new Nette\Database\Connection();
?>

?

David Matějka
Moderator | 6445
+
0
-

o ukonceni spojeni se stara PDO samo, k cemu to potrebujes?

EDIT: jinak by mohlo stacit unsetnout tu promennou

Editoval matej21 (11. 9. 2013 19:32)

animack
Člen | 19
+
0
-

matej21 napsal(a):

o ukonceni spojeni se stara PDO samo, k cemu to potrebujes?

EDIT: jinak by mohlo stacit unsetnout tu promennou

Pretože to používam vo websockete a po každej požiadavke na socket chcem ukončiť spojenie ak existuje a práve keď dám unset($database); tak beží ďalej.

David Matějka
Moderator | 6445
+
0
-

nebylo by lepsi pro vsechny pozadavky mit jedno sdilene spojeni? aby se nemuselo porad navazovat?

animack
Člen | 19
+
0
-

matej21 napsal(a):

nebylo by lepsi pro vsechny pozadavky mit jedno sdilene spojeni? aby se nemuselo porad navazovat?

S persistant pripojením sú problémy, keď padne mysql server, keď sa pre nejakú príčinu ukončí a zistiť, či teda som pripojený… pre to je jednoduchšie ak nieko pošle niekto do socketu a vyžaduje si to db tak ju spojiť a na konci príkazu ukončiť.

David Matějka
Moderator | 6445
+
0
-

tak me napada.. ono to bude asi slozitejsi nez to vypada.. protoze spojeni se uzavre pri destrukci PDO; a k tomu dojde ve chvili, kdy instance neni v zadne promenne. ALE Nette\Database\Connection se drzi v kazdem Selection a selection se drzi v activerow… takze pro destrukci budes muset zrusit vsechno tohle :)

EDIT: v 2.1 by stacila jednoducha uprava – metoda close(), ktera nastavi Connection::$pdo na null, bohuzel je to private, takze je nutny zasah do nette.

Editoval matej21 (11. 9. 2013 23:40)

animack
Člen | 19
+
0
-

matej21 napsal(a):

tak me napada.. ono to bude asi slozitejsi nez to vypada.. protoze spojeni se uzavre pri destrukci PDO; a k tomu dojde ve chvili, kdy instance neni v zadne promenne. ALE Nette\Database\Connection se drzi v kazdem Selection a selection se drzi v activerow… takze pro destrukci budes muset zrusit vsechno tohle :)

EDIT: v 2.1 by stacila jednoducha uprava – metoda close(), ktera nastavi Connection::$pdo na null, bohuzel je to private, takze je nutny zasah do nette.

Používam poslednú verziu z gitu, novšie než 2.1 a skúšal som to cez nový class a nastavil znova to pdo a pridal close method ale to nastavenie na null nepomohlo.

thunderbuff
Člen | 164
+
0
-

po nastavení na null nebo unsetu můžeš zkusit zavolat garbage collector (http://php.net/…t-cycles.php)

Ale zda to pomůže, to nevím