Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][OOP][PDO] Błąd podczas zapytania
Dominator
post
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Nie wiem czemu to się pojawia, pomoże ktoś? Fatal error: Call to undefined method DB::prepare() in index.php on line 5

index.php
  1. <?php
  2.  
  3. include "DBConnection.php";
  4.  
  5. $stmt = $db->prepare("");
  6. $stmt->execute();


DBConnection.php
  1. <?php
  2.  
  3. require 'DB.class.php';
  4.  
  5. try
  6. {
  7. $db = new DB("","","","","");
  8. }
  9. catch(PDOException $e)
  10. {
  11. echo "Error! Code ->".$e->getMessage();
  12. }


Ten post edytował Dominator 29.05.2013, 19:05:55
Go to the top of the page
+Quote Post
sajegib
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


  1. $db = new DB("","","","","");


co miał autor na myśli?

Google -> PDO
Go to the top of the page
+Quote Post
Dominator
post
Post #3





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Dane specjalnie usunąłem.
Go to the top of the page
+Quote Post
sajegib
post
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


  1. $pdo = new PDO('mysql:host=localhost;dbname=baza', 'root', 'root');


obiekt PDO tworzysz jak wyżej, a błędy sprawdzisz dzięki temu poniżej (IMG:style_emoticons/default/wink.gif)

  1. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


Ten post edytował sajegib 29.05.2013, 18:58:22
Go to the top of the page
+Quote Post
Dominator
post
Post #5





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Na tą potrzebę utworzyłem sobie klasę (IMG:style_emoticons/default/wink.gif)

  1. <?php
  2.  
  3. Class DB
  4. {
  5. public function __construct($server, $port, $username, $password, $database)
  6. {
  7. $this->Set($server, $port, $username, $password, $database);
  8. $this->$database=$this->Connect();
  9. }
  10. protected function Set($server, $port, $username, $password, $database)
  11. {
  12. $this->server = $server;
  13. $this->port = $port;
  14. $this->user = $username;
  15. $this->pass = $password;
  16. $this->database = $database;
  17. }
  18. protected function Connect()
  19. {
  20. $pdo = new PDO('mysql:host='.$this->server.';dbname='.$this->database.';port='.$this->port, $this->user, $this->pass );
  21. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  22. }
  23. protected $server;
  24. protected $port ;
  25. protected $user;
  26. protected $password;
  27. protected $database;
  28. protected $db;
  29. }
  30.  
  31. ?>
Go to the top of the page
+Quote Post
sajegib
post
Post #6





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Mogłeś tak od razu, btw, jaki błąd masz?
Go to the top of the page
+Quote Post
Dominator
post
Post #7





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Fatal error: Call to undefined method DB::prepare() in index.php on line 5
Go to the top of the page
+Quote Post
sajegib
post
Post #8





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


to bardzo proste, próbujesz się odwołać do nieistniejącej metody, co więcej, powinieneś się odwoływać do metody prepare obiektu PDO, a nie obiektu klasy DB (jak robisz teraz)

Ten post edytował sajegib 29.05.2013, 19:14:46
Go to the top of the page
+Quote Post
Mackos
post
Post #9





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

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


No to chyba powinieneś mieć coś takiego:
  1. protected function Connect()
  2. {
  3. $pdo = new PDO('mysql:host='.$this->server.';dbname='.$this->database.';port='.$this->port, $this->user, $this->pass );
  4. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. return $pdo;
  6. }

Bo z tego co widzę w żadnym miejscu nie zwracasz instancji utworzonej klasy PDO, dlatego on nie wie do czego się ma odwoływać.
i returna musisz też dać do konstruktora w tym wypadku.

Ten post edytował Mackos 29.05.2013, 19:21:21
Go to the top of the page
+Quote Post
Dominator
post
Post #10





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Wiem o co tutaj chodzi (IMG:style_emoticons/default/smile.gif) Dzięki za wytłumaczenie.
W takim razie lepiej będzie chyba korzystać z czystego PDO, a nie z klas własnych, które zawierają funkcje łączące się z PDO (t.j. moja klasa DB)?
Go to the top of the page
+Quote Post
Mackos
post
Post #11





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

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


Zdecydowanie lepiej korzystać z własnej klasy do PDO, u mnie zapytanie do bazy razem z bindowaniem wszystkich zmiennych to jedna linijka (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Dominator
post
Post #12





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


To usuwam tą klasę, dzięki wielkie!
Go to the top of the page
+Quote Post
dżozef
post
Post #13





Grupa: Zarejestrowani
Postów: 125
Pomógł: 9
Dołączył: 25.05.2013

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


Cytat(Mackos @ 29.05.2013, 19:26:34 ) *
Zdecydowanie lepiej korzystać z własnej klasy do PDO, u mnie zapytanie do bazy razem z bindowaniem wszystkich zmiennych to jedna linijka (IMG:style_emoticons/default/tongue.gif)

podzielisz się klasą? (IMG:style_emoticons/default/smile.gif)
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: 15.09.2025 - 01:33