Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP]Przekazanie obiektu z metody do metody
smiesznylolek
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

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


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()(IMG:style_emoticons/default/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. }
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Nie prościej wykonać zapytanie i pobrać wyniki w jednej metodzie?

Ten post edytował Turson 28.12.2013, 21:00:52
Go to the top of the page
+Quote Post
com
post
Post #3





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


http://pl.wikipedia.org/wiki/CRUD
Go to the top of the page
+Quote Post
smiesznylolek
post
Post #4





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

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


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?

Ten post edytował smiesznylolek 30.12.2013, 13:09:27
Go to the top of the page
+Quote Post
Turson
post
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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
Go to the top of the page
+Quote Post
com
post
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


jakbyś poczytał na temat tego co dałem Ci definicje to byś nie zadał takich pytań, ludzie trochę myślcie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
smiesznylolek
post
Post #7





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

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


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 (IMG:style_emoticons/default/smile.gif)


nie do końca rozumiem, o co Ci chodzi, i co objaśnienie CRUD ma do mojego problemu?
Go to the top of the page
+Quote Post
bostaf
post
Post #8





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


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()(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ć (IMG:style_emoticons/default/wink.gif)

PS. CRUDem się nie przejmuj - to faktycznie nie ma tutaj nic do rzeczy.
Go to the top of the page
+Quote Post
smiesznylolek
post
Post #9





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

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


Dzięki wielkie Stary:) jak można było się spodziewać, to pierdółka była, ale dzięki za konkretną odp:)
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 - 18:31