Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysqli] Dziedziczenie po klasie
Forum PHP.pl > Forum > Przedszkole
bobo1
Witam,

Próbuję przerobić kod na obiektowy z wykorzystaniem mysqli. Mam klasę A w której chcę pobrać dane z tabeli, ale za każdym razem otrzymuje błąd: Call to a member function query() on a non-object. Próbuje dziedziczyć po klasie mysqli, ale nie przynosi to żadnego rezultatu. Poniżej znajduje się kod.

Pliki index.php wygląda następująco:
  1. include_once('mysqli_data.php');
  2. include_once('class.a.php');
  3. $a = new A();
  4. $a->GetNrOfClikc($idPartner, $startDate, $endDate).'


plik mysqli_data.php
  1. $mysqli = new mysqli($host, $user, $password, $dbName);


plik class.a.php
  1. class A extends mysqli
  2. {
  3.  
  4. public function GetNrOfClikc ($idPartner, $startDate, $endDate)
  5. {
  6. $result = $mysqli -> query("SELECT COUNT(*) AS count FROM cliks WHERE idPartner = '".$idPartner."' AND dateTime >= '".$startDate."' AND dateTime <= '".$endDate."' ");
  7.  
  8. while ($row = $result->fetch_assoc())
  9. {
  10. return $row['count'];
  11. }
  12. }
  13. }

konrados
Po pierwsze to zrób:
  1. $result = $this -> query( ...

($this zamiast $mysqli)
Po drugie, mimo, że stworzyłeś klasę A, to jednak wciąż instancjonujesz mysqli. Zrób tak:
  1. $mysqli = new A($host, $user, $password, $dbName)
bobo1
Gdzie powinienem dodać $mysqli = new A($host, $user, $password, $dbName) czy do pliku index.php ?
Pytam się ponieważ ciągle dostaje błędy sad.gif.
konrados
W mysqli_data.php includujesz klasę A i potem robisz $mysqli=new A .... i potem wszędzie includujesz mysqli_data.php. W ten sposób wszędzie masz dostęp do swojej klasy.
ps. "Pytam się ponieważ ciągle dostaje błędy"
Przydałaby się jeszcze informacja jakie to błędy.
bobo1
Czyli jeśli dobrze zrozumiałem powinno wyglądać tak.

mysqli_data.php
  1. $host = 'localhost';
  2. $user = 'xxx';
  3. $password = 'yyy';
  4. $dbName = 'zzz';
  5. $mysqli = new mysqli($host, $user, $password, $dbName);
  6.  
  7. include_once('class.a.php');
  8. $mysqli = new A($host, $user, $password, $dbName)


class.a.php
  1. include_once('mysqli_data.php');
  2.  
  3. class A extends mysqli
  4. {
  5. public function GetNrOfClikc ($idPartner, $startDate, $endDate)
  6. {
  7. $result = $this -> query("SELECT COUNT(*) AS count FROM cliks WHERE idPartner = '".$idPartner."' AND dateTime >= '".$startDate."' AND dateTime <= '".$endDate."' ");
  8.  
  9. while ($row = $result->fetch_assoc())
  10. {
  11. return $row['count'];
  12. }
  13. }
  14.  
  15. }


index.php
  1. include_once('mysqli_data.php');
  2. $a = new A();
  3. $a->GetNrOfClikc($idPartner, $startDate, $endDate)


Błędy:
Warning: mysqli::query() [mysqli.query]: invalid object or resource A in class.a.php
Fatal error: Call to a member function fetch_assoc() on a non-object in class.a.php
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.