Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php, pdo] Problem z obiektem typu pdo
Forum PHP.pl > Forum > PHP
mazu
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
nospor
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
dr_bonzo
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. ?>
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.