2013-12-10 16 views
8

Nie jestem niczym programista PHP, ale muszę go używać i nie mam pojęcia, jak PHP obsługuje przydzielanie pamięci podczas sesji.Kiedy należy zamknąć połączenie z bazą danych w PHP?

Pracuję nad aplikacją, która żąda uwierzytelnienia HTTP. Po zalogowaniu można manipulować danymi za pomocą ładnego interfejsu.
Ktoś powiedział mi w innym poście, że nie powinienem zamykać połączenia danych mysql po każdym wykonaniu, ale nie wiem, jak to połączenie pozostaje w pamięci podczas korzystania z tej aplikacji, ponieważ po stronie serwera nie mam pojęcia, co PHP trzyma w pamięci lub nie.

Moje pytanie brzmi: powinienem użyć singletonu, aby połączyć się z bazą danych i nigdy go nie zamykać (ponieważ nigdy nie dowiem się, kiedy aplikacja nie jest używana) lub powinienem stanąć z tym, co robię dzisiaj: otwarcie połączenia - > wykonanie oświadczenie -> ścisły związek

. PS: Używam mysqli

Edycja 1:
Moja aplikacja jest konstrukcja z MVC wzór znaczenie:

|''''''''''|  |'''''''''''''|  |''''''''''''''| 
| view.php | ==> | control.php | ==> | database.php | 
|----------|  |_____________|  |______________| 

Ten wzorzec umożliwia widokowi interakcję z danymi tylko za pośrednictwem control.php, które następnie wywołują funkcję z danych database.php do SELECT lub danych. z wyjaśnieniem mi dasz, należy umieścić:

public function __destruct(){ 
    mysql_close($this->connection); 
} 

wewnątrz database.php, ale ta strona jest obciążenie, gdy pojawia się potrzeba, aby wybrać lub zmodyfikować dane, więc jest wykonywany tylko przez krótki czas, co oznacza, że ​​będzie nadal blisko połączenie na końcu żądania.

Które daje bardziej precyzyjne pytanie, gdzie powinienem umieścić spokój kodu, który podasz, czy mój wzorzec jest istotny w PHP?

+0

to destruktor klasy zarządzającej bazą danych, zobacz: http://stackoverflow.com/questions/2129162/how-do-you-efficiently-connect-to-mysql -in-php-without-reconnecting-on-every-que –

+0

to dlatego, że w schemacie MVC CONTROL kontroluje VIEW i MODEL (baza danych). W twoim schemacie VIEW kontroluje CONTROL i MODEL.Jeśli kodujesz swój MVC we właściwy sposób, problem rozwiąże się automatycznie –

+0

I tu jest problem, nie koduję obiektem, ponieważ tak naprawdę nie wiem jak to zrobić i nie mam czasu na konwersję aplikacji ani czas, aby dowiedzieć się, jak to działa. – Kiwy

Odpowiedz

7

Nigdy nie twórz nowych połączeń dla każdego zapytania; Nie musisz nawet zamykać go ręcznie.

Wystarczy utworzyć połączenie na początku Ty Page

rzucić okiem na: How do you efficiently connect to mysql in php without reconnecting on every query

można użyć tego:

public function __destruct() 
{ 
    mysql_close($this->connection); 
} 

będzie sprawdzony, gdy strona jest zamknięta

+0

, ale nie zamknięcie połączenia może spowodować wycieki pamięci? – Kiwy

+0

możesz zamknąć połączenie, gdy strona się zamknie, zobacz moją edycję na stanowisku –

+1

Chciałbym odpowiedzieć na to +1 – Loko

2

Z PHP Mysqli documentation:

Połączenie między procesem klienta a bazą danych może być ponownie użyte przez proces klienta, zamiast wielokrotnego tworzenia i niszczenia. Zmniejsza to obciążenie ...

Powiązane problemy