Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zasięg metody
Forum PHP.pl > Forum > Przedszkole
marcwars
Witam,
mam problem z klasami w obiektowym php- nie mogę złapać jednej zmiennej (wyniku z wyszukiwania w mysql).
Mam 2 pliki:
db.php
  1. class baza
  2. {
  3. public $sql;
  4. public $result;
  5. public function __construct ($host, $user, $pswd, $db)
  6. {
  7. $connection = mysql_connect($host, $user, $pswd);
  8. $conn = mysql_select_db($db, $connection);
  9. }
  10.  
  11. public function sqlQuery($query)
  12. {
  13. $this->sql = $query;
  14. $this->result = mysql_query($this->sql);
  15. }
  16. }


a w drugim chcę wykorzystać metodę sqlQuery($query)
drugi.php
  1. include_once("db.php");
  2.  
  3.  
  4.  
  5. class Model
  6. {
  7.  
  8. public function getBookList ()
  9. {
  10. $db = new baza ('xxx', 'xxx', 'xxx', 'xxx');
  11. $db = sqlQuery("SELECT * FROM artykul");
  12. while($row = mysql_fetch_assoc($db))
  13. {
  14. $out[]=$row;
  15. }
  16. ......
  17. }
  18. }


Szukałem, ale tego nie mogę znaleźć, jak mogę dostać się do wyniku wyszukiwania.
Powyższy kod chodzi prawidłowo tylko, kiedy wstawię funkcję sqlQuery($query) w class Model, z zewnątrz nie chce chodzić, chociaż dojście do klasy baza istnieje.
Problem tkwi pewnie albo w zasięgu metody - wywala błąd "Call to undefined function sqlQuery() "

Próbowałem dziedziczenia, ale też nie chodzi:(
-kaem-
  1. $result = $db->sqlQuery("SELECT * FROM artykul");
  2. while($row = mysql_fetch_assoc($result ))
przecież sqlQuery jest metodą obiektu $db
marcwars
Niestety, wyrzuciło mi błędy:
mysql_fetch_assoc() expects parameter 1 to be resource... czyli dalej tego nie widzi.
darko
  1. $db = new baza ('xxx', 'xxx', 'xxx', 'xxx');
  2. $db->sqlQuery("SELECT * FROM artykul");
  3. $result = $db->result;
  4. while($row = mysql_fetch_assoc($result))

Najlepiej pokaż całość metody getBookList, zwłaszcza, czy coś zwraca i jeśli tak, to co ?
marcwars
Dzięki, teraz działa, ale dlaczego nie mogło być od razu przejścia: $result = $this->sqlQuery.... ? to wynika z zasięgu właściwości/funkcji? Wszystko było public, dlatego tej sytuacji nie rozumiem.

  1. public function getBookList ()
  2. {
  3. $db = new baza ('xxx', 'xxx', 'xxx', 'xxx');
  4. $db->sqlQuery("SELECT * FROM artykul");
  5. $result = $db->result;
  6. while($row = mysql_fetch_assoc($result))
  7. {
  8. $out[]=$row;
  9. }
  10. $books = array();
  11. foreach ($out as $art)
  12. {
  13.  
  14. $books[$art['tytul']] = new Book ($art['tytul'], $art['nazwisko'], $art['tekst']);
  15.  
  16. }
  17. return $books;
  18. }
ano
A czy metoda baza::sqlQuery(...) coś zwraca? Nie?
Więc masz rozwiązanie dlaczego nie mogłesś mieć od razu $result =...
Ilware
Dlatego że zgodnie z tym co napisałeś funkcja sqlQuery() nic nie zwraca. Musiał byś do niej dodać :

  1. public function sqlQuery($query)
  2. {
  3. $this->sql = $query;
  4. return $this->result = mysql_query($this->sql);
  5. }


i wtedy konstrukcja
  1. $result = $db->sqlQuery("SELECT * FROM artykul");
  2. while($row = mysql_fetch_assoc($result )){}

była by poprawna
marcwars
Dzięki.
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.