![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 5.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Korzystałem z tutoriala PDO na wikibooks - http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO Pierwsza rzecz jaka mnie zastanawia to jak poprawnie trzymać połączenie z bazą danych w przypadku PDO. Doczytałem się, że w przeciwieństwie do funkcji mysql_ w PDO otwieranie połączenia (mysql_connect) na początku skryptu i zamykanie go na końcu skryptu nie jest stosowane. Czy powinno się dla każdego zapytania sql tworzyć nowy obiekt pdo jak tu:
Czy może lepiej bawić się closeCursor(); ? I wewnątrz try'a po każdym zapytaniu korzystać z tego closeCursor (wrzucając w strukturę try'a mase różnego kodu całego skryptu)? Nie wiem czy dobrze zrozumiałem według manuala co closeCursor ma robić, dlatego będę wdzięczny jeśli ktoś dałby rady to wyjaśnić. A najbardziej ucieszył bym się z jakiegoś konkretnego przykładu. Kolejna sprawa do czego służy i jak korzystać z PDO::ATTR_PERSISTENT ? Chciałbym napisać sobie funkcję, której przekazuje jakąś wartość, która to wartość jest porównywana w mysql. Czy specjalnie dla takiej funkcji tworzyć w jej wnętrzu instancje new PDO i pod koniec wykonywania funkcji przypisać null'a? Czy może lepiej przekazać do funkcji od razu instancję klasy PDO i wewnątrz po prostu porobić executy, query itd. ? Jak najlepiej korzystać w takich sytuacjach z PDO? Ten post edytował superzenon 5.12.2010, 22:56:19 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Nieee, nie twórz za każdym razem nowego obiektu. Musisz gdzieś sobie go trzymać i tak jak mówisz przekazywać do klas, w których jest to wymagane.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 5.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Okej, a czy w takim razie, po użyciu trzeba to jakość "wyczyścić" np. uzywając closeCursor ? I gdzie tutaj zastosowanie PDO::ATTR_PERSISTENT - przydatne jest ustawienie atrybutu stałego połaczenia? Czy to może przydaje się tylko w przypadku, gdy inny skrypt będzie odwoływał sie do tego, w którym mam ustawione połączenie?
Ten post edytował superzenon 6.12.2010, 14:37:05 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Zacznijmy od tego, że closeCursor to metoda PDOStatement. Służy ona mniej więcej do poinformowania silnika bazy, że skończyliśmy pobieranie wyników i może on dalej przetwarzać zapytania.
Jak masz uruchomione PHP? Przez CGI, FastCGI czy moduł serwera? Przy tym pierwszym persistent connection i tak nie zadziała, nie wiem jak z pozostałymi, generalnie nie musisz go stosować, może być z tego więcej szkód niż pożytku. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 5.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wiesz, tylko nadal zastanawia mnie, do czego się tych "persisten connection" używa.
![]() Kolejna rzecz przyszła mi na myśl, jak jest poprawnie, tak:
czy tak:
Chodzi mi o to, czy kod dotyczący obiektu PDO muszę wrzucać do try {} - tak jak jest w każdym z tutoriali jakie czytałem, czy można bez obaw sobie reszte kodu poza ten try {} napisać? Są jakieś zagrożenia jak np. coś w zapytaniu będzie nie tak i sql sypnie błedem, który się nie wyświetli? Albo pokaże coś za dużo odnośnie błędu? Ten post edytował superzenon 6.12.2010, 18:02:38 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. PDO bardzo słabo obsługuje wyjątki.
2. PDO trzeba najpierw ustawić w tryb wyrzucania wyjątków zamiast zwykłych błędów (PDO::setAttribute()). 3. Metody PDOStatement::execute() i inne również mogą wyrzucić wyjątek więc powinny być w bloku try ... catch. 4. Jeżeli wyjątek masz zamiar obsłużyć tak samo (tutaj: jego wyświetlenie) to możesz całość objąć jednym blokiem try ... catch. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 22:10 |