Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO - "utrzymywanie połączenia" i przekazywanie do funkcji $pdo
Forum PHP.pl > Forum > PHP > Object-oriented programming
Darekxp
Witam!

Chciałbym tworzyć nowe funkcje bez przekazywania zmiennej $pdo w funkcji. Do tej pory robiłem public function results($pdo, $query){}, lecz chciałbym tego unikać. Próbowałem na różne sposoby, przejrzałem forum i google, ale nie znalazłem rozwiązania problemu.

Wywala błąd: Fatal error: Call to a member function query() on a non-object. Domyślam się, że do funckcji nie dociera połączenie ze zmiennej $pdo. To moje początki z OOP. Jak to rozwiązać?

  1. <?php
  2.  
  3. class dbMySQL extends PDO
  4. {
  5. ## VARIABLES ##
  6.  
  7. private $dbHost = 'localhost';
  8. private $dbName = 'cms';
  9. private $dbUser = 'root';
  10. private $dbPass = '';
  11.  
  12. ## CONNECT ##
  13.  
  14. public function __construct()
  15. {
  16. try
  17. {
  18. $pdo = new PDO("mysql:host={$this->dbHost};dbname={$this->dbName}", $this->dbUser, $this->dbPass);
  19. }
  20. catch (PDOException $e)
  21. {
  22. echo 'Brak połączenia z bazą danych.'. $e->getMessage();
  23. }
  24. }
  25.  
  26. ## RESULTS ##
  27.  
  28. public function results($query)
  29. {
  30. $results = $pdo->query($query)->rowCount();
  31.  
  32. return $results;
  33. }
markonix
W results nie ma żadnej zmiennej $pdo tak więc wiadomo, że zwróci błąd.
Dodaj parametr $pdo do klasy i odwołuj się do niego za pomocą $this.
Darekxp
Parametr do klasy, tzn?

$this->$pdo = new PDO(); ?

Próbowałem na różne sposoby, można jakoś jaśniej smile.gif ?
markonix
$this->pdo zamiast $pdo i tyle.
Darekxp
Dzięki!

A jeszcze pytanko - czy poniższa funkcja jest poprawnie zdefiniowana i czy zamknięcie połączenia na końcu funckji jest wskazane czy powinno być w innym miejscu?

  1. <? ## RESULT ##
  2.  
  3. public function result($query)
  4. {
  5. $results = $this->pdo->query($query)->rowCount();
  6.  
  7. return $results;
  8.  
  9. $query->closeCursor();
  10. }
markonix
To co za return się nie wykona i tak więc kod nie ma sensu wink.gif
No i sama nazwą "result", a zwracasz liczbę wierszy - to się jakoś nie klei wink.gif
Darekxp
Czy teraz jest poprawniej?

  1. <?
  2. ## ROW COUNT ##
  3.  
  4. public function rowCount($query)
  5. {
  6. return $this->pdo->query($query)->rowCount();
  7. }
markonix
No tak choć sama metoda raczej służy bardziej jako alias aniżeli faktycznie jako metoda, która w czymś pomaga / upraszcza wink.gif
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.