Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Przekazanie obiektu z metody do metody
Forum PHP.pl > Forum > Przedszkole
smiesznylolek
mam taki mały problem, tworzę sobie klasę do obsługi bazy danych. I dla tesów zrobiłem taką prosty skrypt do sprawdzenia czy działa:

  1. <?php
  2. include_once 'dbmenager.php';
  3. $foo = new dbmenager();
  4.  
  5. $foo -> sqlQuery("SELECT * FROM user");
  6.  
  7. while ($row = $foo -> sqlResult())
  8. {
  9. echo $data->imie;
  10.  
  11. };




Problem się pojawia w metodzie sqlResult(). W przeglądarce wyskauje mi bład Call to a member function fetch_object() on a non-object in D:\xampp\htdocs\baza\dbmenager.php on line 36($record = $this->result->fetch_object()wink.gif. Wydaje mi się żę w jakiś zły sposób próbuję przesłać wynik zapytania do tej metody przez co pojawia się błąd. Ale już się trochę pogubiłem i nie wiem co robie nie tak. W każdym razie sprawdziłem że "$result" jest obiektem. Tylko coś źle chyba robię żeby to $result było użyte w metodzie sqlResult(). Czy mógłbym prosić o jakąś radę?

  1. class dbmenager {
  2. private $conn;
  3. private $query;
  4. private $result;
  5. private $record;
  6.  
  7. function __construct() {
  8. $this->conn = mysqli_connect('localhost', 'root', 'root', 'bazaobiekt');
  9. if(mysqli_connect_errno()){
  10. echo 'Błąd połączenia z bazą danych :'.mysqli_connect_errno(); exit();
  11. }
  12.  
  13. }
  14. function sqlQuery($query){
  15. $this->query = $query;
  16. $result = mysqli_query($this->conn, $query);
  17. //print_r($result);
  18.  
  19. return $this->result;
  20. }
  21.  
  22. function sqlResult(){
  23.  
  24. [b]$record = $this->result->fetch_object();[/b]
  25. return $this->record;
  26. }
  27. }
Turson
Nie prościej wykonać zapytanie i pobrać wyniki w jednej metodzie?
com
http://pl.wikipedia.org/wiki/CRUD
smiesznylolek
Cytat(Turson @ 28.12.2013, 20:27:04 ) *
Nie prościej wykonać zapytanie i pobrać wyniki w jednej metodzie?


ale czy takie rozwiązanie jest poprawne? Bo chciałem zrobić tak żeby klasa dbmenager była odpowiedzialna właśnie za operacje na bazie, a takim wypadku będę musiał powielać kod...
Chyba że chodzi Ci o to żeby w metodzie sqlQuery umieścić kod z sqlResult?
Turson
Cytat(smiesznylolek @ 30.12.2013, 13:08:13 ) *
Chyba że chodzi Ci o to żeby w metodzie sqlQuery umieścić kod z sqlResult?

Dokładnie o to. Powiedzmy, że pobierasz dane użytkownika
  1. function getUserData($id){
  2. $stmt=$this->db->prepare("SELECT * FROM users WHERE id=:id");
  3. $stmt->bindValue(':id',$id,PDO::PARAM_INT);
  4. $stmt->execute();
  5. return $stmt;
  6. }

W metodzie getUserData otrzymujesz tablicę z danymi.

Zamiast w każdej klasie pisać konstruktor do połączenia z bazą, polecam zrobić osobną klasę z połączeniem, a potem w kolejnych klasach tylko ją połączać przez extends
com
jakbyś poczytał na temat tego co dałem Ci definicje to byś nie zadał takich pytań, ludzie trochę myślcie smile.gif
smiesznylolek
Cytat(com @ 30.12.2013, 16:44:51 ) *
jakbyś poczytał na temat tego co dałem Ci definicje to byś nie zadał takich pytań, ludzie trochę myślcie smile.gif


nie do końca rozumiem, o co Ci chodzi, i co objaśnienie CRUD ma do mojego problemu?
bostaf
Cytat(smiesznylolek @ 28.12.2013, 20:19:14 ) *
Call to a member function fetch_object() on a non-object in D:\xampp\htdocs\baza\dbmenager.php on line 36($record = $this->result->fetch_object()wink.gif.

Błąd "Call to a member function on a non-object" oznacza, że próbowano wywołać metodę klasy na zmiennej nie będącej instancją żadnej klasy. Zwróć uwagę na przedimek nieokreślony "a" w komunikacie błędu: "a ... function" - "jakaś funkcja" - parser nawet nie wie, o jaką funkcję chodzi. I nic dziwnego - nie jest taki bystry jak my tutaj smile.gif W tym nieszczęsnym wierszu 36 wywołujesz metodę fetch_object() na polu result, a wcześniej nigdzie nie ustawiłeś wartości tego pola - ma ono wartość NULL (bystry parser by chociaż taką podpowiedź dał). Mógłbyś w metodzie sqlQuery() zamiast zwracać pustą wartość pola (return $this->result;), ustawić ją: $this->result = $result;, wtedy może coś zacznie hulać wink.gif

PS. CRUDem się nie przejmuj - to faktycznie nie ma tutaj nic do rzeczy.
smiesznylolek
Dzięki wielkie Stary:) jak można było się spodziewać, to pierdółka była, ale dzięki za konkretną odp:)
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.