Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][OOP][PDO] Błąd podczas zapytania
Forum PHP.pl > Forum > Przedszkole
Dominator
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. }
sajegib
  1. $db = new DB("","","","","");


co miał autor na myśli?

Google -> PDO
Dominator
Dane specjalnie usunąłem.
sajegib
  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 wink.gif

  1. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Dominator
Na tą potrzebę utworzyłem sobie klasę 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. ?>
sajegib
Mogłeś tak od razu, btw, jaki błąd masz?
Dominator
Fatal error: Call to undefined method DB::prepare() in index.php on line 5
sajegib
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)
Mackos
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.
Dominator
Wiem o co tutaj chodzi 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)?
Mackos
Zdecydowanie lepiej korzystać z własnej klasy do PDO, u mnie zapytanie do bazy razem z bindowaniem wszystkich zmiennych to jedna linijka tongue.gif
Dominator
To usuwam tą klasę, dzięki wielkie!
dżozef
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 tongue.gif

podzielisz się klasą? smile.gif
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.