Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tworzenie połączenia z bazą danych
pitu
post
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


Mam pytanie, zaczynam dopiero z OOP. Stworzyłem klasę służącą do połączenia z bazą danych.

Klasa:
  1. <?php
  2. class Db{
  3. private $dbh;
  4.  
  5. public function __construct(){
  6. $host = 'localhost';
  7. $dbname = '';
  8. $user = '';
  9. $pass = '';
  10.  
  11. try{
  12. $this->dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
  13. $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14. }
  15. catch(PDOException $e){
  16. echo $e->getMessage();
  17. exit();
  18. }
  19. }
  20.  
  21. public function __destruct(){
  22. $this->dbh = null;
  23. }
  24. }
  25. ?>


W innej klasie mam:
  1. private $db;
  2.  
  3. public function __constructor(Db $db){
  4. $this->db = $db;
  5. }
  6. public function delArticle($id){
  7. $del = $this->db->exec('DELETE FROM artykuly WHERE id = '.$this->id);
  8. }


W pliku głównym:
  1. $db = new Db;
  2. $article = new Article($db);
  3. echo $article->delArticle(1);


Niestety otrzymuję błąd z informacą, że $db nie jest obiektem i nie mogę wywołać na jego rzecz metody exec()
  1. Call to a member function exec() on a non-object...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Bo klasa nie jest obiektem przecież, tylko klasą. (IMG:style_emoticons/default/smile.gif)

  1.  
  2. public function __constructor(Db $db){
  3. $this->db = $db->wartoscDbh();
  4. }


Dopisz do klasy Db:

  1. public function wartoscDbh() {
  2. return $this->dbh;
  3. }


I tutaj argument funkcji jest zbędny, ponieważ operujesz na obiekcie, a nie na zmiennej, swoją drogą nigdzie nie przypisujesz wartości. Więc albo dodaj do konstruktora $this->id = costam, albo zmień w zapytaniu na $id.

  1. public function delArticle($id){
  2. $del = $this->db->exec('DELETE FROM artykuly WHERE id = '.$this->id);
  3. }


Ten post edytował b4rt3kk 4.10.2012, 01:15:14
Go to the top of the page
+Quote Post

Posty w temacie


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: 9.08.2026 - 02:15