Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php, pdo] Problem z obiektem typu pdo
mazu
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 11.01.2006

Ostrzeżenie: (0%)
-----


Witam,
Pisze wlasnie wiekszy system wykorzystujacy php i PostgreSQL, zdecydowalem sie na uzycie php Data Objects ze wzgledu na uniwersalnosc. Stosuje polaczenie typu persistent. Moj kod wyglada mniej wiecej tak:

  1. <?php
  2. if (isset($_POST['login']) && !isset($_SESSION['username'])) {
  3.  try {  
  4. $pdo = new PDO(CON_STR, 'user', 'password', array(PDO::ATTR_PERSISTENT => true));
  5. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  }
  7.  catch(PDOException $err) {
  8. echo $err->getMessage();
  9.  }
  10.  $row = $pdo->query...
  11.  [...]
  12. }
  13.  
  14. if (!isset($_SESSION['username'])) {
  15.  [...]
  16. } else {
  17.  [...]
  18.  switch ($_GET['module']) {
  19. case 1:
  20.  if (!$_SESSION['uprawnienia']{0}) {
  21. [...]
  22.  } else {
  23. [...]
  24. switch($_GET['action']) {
  25.  case 1:
  26. $row = $pdo->query('SELECT count(*) AS ile FROM Personel')->fetch();
  27. [...]
  28. ?>


Nieistotne fragmenty kodu pozwolilem sobie pominac. Problem w tym ze przy tym drugim zapytaniu wewnatrz tych switchy zwraca mi blad:


Fatal error: Call to a member function query() on a non-object in [...] on line 90
" title="Zobacz w manualu php" target="_manual


Wydawalo mi sie, ze tworzac polaczenie persistent moge zrobic to w jednym miejscu i przez cala dlugosc sesji je wykorzystywac, a tutaj wyglada na to jakby zostalo ono zamkniete, lub zmienna zostala nakryta. Gdzie lezy problem?

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jak na moj gust wyraźnie napisano, że $pdo nie jest obiektem.
W kodzie co pokazales, inicjalizujesz $pdo dopiero wtedy gdy: !isset($_SESSION['username'])

a blad dostajesz w kodzie dla warunku: isset($_SESSION['username'])

Wniosek:
No juz chyba sam do niego dojdziesz

ps: przenosze z php5


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


2. Zla obsluga wyjatkow
masz tak (w skrocie):
  1. <?php
  2. try
  3. {
  4. $pdo = new PDO()
  5. }
  6. catch ( PDOExc... )
  7. {
  8. }
  9.  
  10. $pdo->query()
  11. // i tutaj uzywasz $pdo, choc nie masz gwarancji ze istnieje, przeciez wyjatek mog
    l byc wyrzucony i zlapamny -- wiec $pdo nie istnieje.
  12. ?>


Powinno byc tak

  1. <?php
  2. try
  3. {
  4. $pdo = new PDO()
  5.  
  6. $pdo->query() /////////
  7. // ew. dodatkowe bloki try/catch -- jesli sa potrzebne
  8. }
  9. catch ( PDOExc... )
  10. {
  11. }
  12. ?>


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 23:33