Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Klasa zarządzania bazą danych inna metoda
Forum PHP.pl > Forum > Przedszkole
arkos
Witajcie!
W programowaniu obiektowym dopiero zaczynam, już parę klas napisałem i działają wedle moich oczekiwań, ale mam problem z klasą którą sobie stworzyłem odpowiadającą za zarządzanie bazą danych.

Problem polega na tym, iż gdy wykonam np.
  1. $pdo -> numRows('id', '`test` WHERE `name`="ala'"')

Dostaję błąd:
Fatal error: Call to a member function query() on a non-object in pdo_connect.class.php on line 29

Klasa wygląda następująco:
  1. <?php
  2. class PDOconnect{
  3. private $_user;
  4. private $_password;
  5. private $_name;
  6. private $_host;
  7. private $_tpl;
  8. private $_pdo;
  9.  
  10. public function __construct($user, $password, $name, $host, $tpl){
  11. $this->_user = $user;
  12. $this->_password = $password;
  13. $this->_name = $name;
  14. $this->_host = $host;
  15.  
  16. try{ $pdo = new PDO('mysql:host='.$host.';dbname='.$name, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); }
  17. catch(PDOException $e){
  18. echo 'Blad polaczenia z baza danych!';
  19. }
  20. $this->_pdo = $pdo;
  21. return $pdo;
  22. }
  23.  
  24. public function numRows($count_from, $query){
  25. $sql_numrows = $pdo -> query('SELECT COUNT(`'.$count_from.'`) AS `numrows` FROM '.$query.'');
  26. while($sql_numrows_row = $sql_numrows -> fetch()){
  27. return $sql_numrows_row['numrows'];
  28. }
  29. }
  30.  
  31. public function __destruct(){
  32. $this->_pdo = null;
  33. }
  34. }
  35. ?>

Mogę prosić o jakieś rady co tutaj może być źle, ew. dopracować/poprawić?

Oczywiście przed wykonaniem jakiejś metody wykonuję:
  1. require('pdo_connect.class.php');
  2. $pdo = new PDOconnect(DB_1_USER, DB_1_PASSWORD, DB_1_NAME, DB_1_HOST, $tpl);


Za wszystkie odpowiedzi dziękuję!
Pozdrawiam.
CuteOne
1. nie $pdo->query tylko $this->_pdo->query
2. dlaczego zwracasz obiekt $pdo w konstruktorze?
arkos
Dzięki, działa! Taki mały błąd hehe.

Zwracam dlatego, że jeżeli nie zwrócę to nie zadziała później np.
  1. require('pdo_connect.class.php');
  2. $pdo = new PDOconnect(DB_1_USER, DB_1_PASSWORD, DB_1_NAME, DB_1_HOST, $tpl);
  3. $pdo => query(...);

Czy się mylę?

Dziwne, gdyż zwraca błąd nawet z return dla powyższego przykładu:
Fatal error: Call to undefined method PDOconnect::query() in index.php on line 29

Zmieniłem nazwę klasy na:
  1. class PDOconnect extends PDO
Czyli dodałem extends PDO, ale wywala błąd teraz:
Warning: PDO::query() [<a href='pdo.query'>pdo.query</a>]: SQLSTATE[00000]: No error: PDO constructor was not called in index.php on line 29

ROZWIĄZANIE dla potomnych:
Zamieniłem również w konstruktorze new PDO() na parent::__construct()
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.