Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przechowywanie połączenia z bazą jako zmiennej w sesji
Forum PHP.pl > Forum > PHP
Indeo
Pewnie głupie pytanie, ale musze je zadać smile.gif Czy połączenie z bazą danych uzyskane przez mysql_connect czy mysql_pconnect może być zapisane w sesji i utrzymane po przeładowaniu strony tak, aby skrypt nie musiał sie za każydm razem logować do serwera mysql?
Cysiaczek
Nie - nie można przechowywać uchwytów połaczeń w sesji, w cookie, ani w żaden inny sposób. Niestety. sad.gif
Indeo
Czyli nastepująca funkcjonalność jest niemozliwa do zrealizowania? :

W komercyjnych aplikacjach bazodanowych istnieje funkcjonalność polegająca na tym, że aplikacja uruchomiona w trybie testowym działa na otwartej w bazie danych transakcji. Uzytkownik testuje na bazie rózne rzeczy. Po wyjściu użytkownika (zerwaniu połączenia z bazą) transakcja nie zostaje potwierdzona a dane wracają do stanu początkowego.

Ja chciałem zrobić coś podobnego - użytkownik robi pewne rzeczy, ocenia wynik a następnie albo go zatwierdza albo nie, a baza wraca do stanu sprzed zmian.
Problem w tym, że po przeładowaniu strony nawiązywane jest nowe połączenie, a stare jest zamykane (z automatycznym skutkiem ROLLBACK) i użytkownik ciagle widzi to samo (baze bez zmian), bo każde przeładowanie strony wszystko resetuje.

Więc nie da sie tego zrealizować?
nospor
http://pl.php.net/manual/pl/function.mysql-pconnect.php
Cytat
mysql_pconnect() zachowuje się prawie jak mysql_connect() z dwoma zasadniczymi różnicami.

Pierwsza, podczas łączenia funkcja najpierw spróbuje znaleźć połączenie (stałe) już otwarte dla tego samego hosta, użytkownika i hasła. Jeżeli je znajdzie, jego identyfikator zostanie zwrócony zamiast otwierania nowego połączenia.

Druga, połączenie z serwerem SQL nie zostanie zamknięte po zakończeniu wykonywania skryptu. Zamiast tego połączenie pozostanie otwarte do późniejszego użycia (mysql_close() nie zamyka połączeń nawiązanych za pomocą mysql_pconnect()).
Indeo
Dobra dobra, tyle to i ja widziałem, ale ja pytam praktycznie - bo dlaczego w takim razie korzystając z mysql_pconnect() ustawiam sobie w bazie zmienną np

  1. SET @zmienna=1;


a po przeładowaniu strony po tej zmiennej w bazie nie ma już sladu? smile.gif
nospor
Na szybko sklecilem taki skrypcik:
  1. <?php
  2. mysql_pconnect('localhost', 'root', '');
  3. $row = mysql_query('set @zmienna=1');
  4. $row = mysql_fetch_array(mysql_query('select @zmienna'));
  5. print_r($row);
  6. ?>

I mi dziala smile.gif zawsze zmienna jest wyswietlana.
Oczywiscie po pierwszym zapuszczeniu skryptu, nalezy usunac linie, ktora ustawia zmienna ponownie smile.gif
Indeo
No a u mnie nie działa smile.gif
Może to kwestia ustawień?
dr_bonzo
Ktorego Mysqla masz, podaj dokladna wersje
Indeo
Uzywam mysql-5.0.21-win32 ...

Już wszystko jasne. mysql_pconnect działa tak jak to napisał nospor ale tylko kiedy php jest uruchomiony w trybie modułu anie w trybie CGI tak jak miałem wcześniej. Sprawdziłem i teraz działa smile.gif
Dzieki winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.