Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z polaczeniem z baza, Fatal error: Call to a member function query() on a non-object in
Czarnulson
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.12.2005

Ostrzeżenie: (0%)
-----


Witam, mam pewien problem.

mam klase polaczenia z baza sql.class.php, ktora inluduje w pliku glownym. Tworze obiekt:

  1. <?php
  2. $sql = new Sql;
  3. $sql -> connect(tu dane serwera itp);
  4. ?>


i tu wszystko dziala poprawnie. Includuje plik user.class.php w ktorym mam metode w ktorej chce pobrac dane z bazy:

  1. <?php
  2. $ask = "SELECT id FROM user WHERE login = '$login'";
  3. $result = $sql->query($ask);
  4. $numRows = $sql->numRows($result);
  5. ?>


i tu pojawia sie blad: Fatal error: Call to a member function query() on a non-object in...

Czy ktos wie co to moze oznaczac?

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Whisller
post
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

Ostrzeżenie: (0%)
-----


http://forum.php.pl/Referencja_do_klasy_w_...sie_t86938.html
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


zakładam że user.class.php to definicja klasy user, zatem fragment:
  1. <?php
  2. $ask = "SELECT id FROM user WHERE login = '$login'";
  3. $result = $sql->query($ask);
  4. $numRows = $sql->numRows($result);
  5. ?>

znajduje się wewnątrz konstruktora klasy (lub innej metody). no i nie widzi twojej zmiennej globalnej $sql;
masz dwa wyjścia:
1. odwołać się do zmiennej globalnej (niezalecane), wystarczy że dopiszesz przed swoim kodem linijkę:
  1. <?php
  2. global $sql;
  3. ?>

2. przekazać jawnie (zalecane) do konstruktora lub metody obiekt $sql:
  1. <?php
  2. // w klasie user
  3. public metoda($baza)
  4. {
  5. $ask = "SELECT id FROM user WHERE login = '$login'";
  6.  $result = $baza->query($ask);
  7.  $numRows = $baza->numRows($result);
  8.  }
  9. //i wywołanie w pliku głównym
  10. user->metoda($sql);
  11. ?>

powodzenia.

Ten post edytował nevt 8.02.2008, 22:12:12
Go to the top of the page
+Quote Post
.radex
post
Post #4





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Niepotrzebne utrudnienie moim zdaniem. Lepiej byłoby użyć np. Singletona, ale może wiesz lepiej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
nevt
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


jawne przekazywanie obiektu bazy ma znaczacą przewagę na odwoływaniem się do globali czy używaniem singletonów (co w sumie dla mnie jest tym samym)

umożliwia bowiem swobodne łączenie do różnych baz danych z różnych instancji tej samej klasy, umożliwia też tworzenie kilku równoległych połączeń do tej samej bazy (np. z innymi uprawnieniami).

a zmiana wywołania
  1. <?php
  2. $db = new mysql.class(...);
  3. $user = new user.class(...);
  4. // na
  5. $db = new mysql.class(...);
  6.  $user = new user.class($db, ...);
  7. ?>

chyba nie jest jakimś niebotycznym skomplikowaniem programu... jak dla mnie wręcz przeciwnie, bo od razu widzę na jakim zbiorze danych operuje klasa user bez konieczności zaglądania do jej kodu...

pozdrawiam wszystkich.
Go to the top of the page
+Quote Post
Czarnulson
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 30.12.2005

Ostrzeżenie: (0%)
-----


dziekuje bardzo! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 09:32