Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Obiekt Bazy danych używany wszędzie
hunter1988
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.05.2013

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


Mam problem, widocznie nie wystarczająco rozumiem zasięgu zmiennych oraz obiektów

Mam sobie plik z łączeniem z bazą danych config.php
  1. class Database{
  2. private static $datasource='mysql:host=localhost;dbname=XXX';
  3. private static $username='XXX';
  4. private static $password='XXX';
  5. private static $db;
  6.  
  7.  
  8. private function __construct(){}
  9.  
  10. public static function getDB(){
  11. if(!isset(self::$db)){
  12. try{
  13. self::$db=new PDO(self::$datasource,self::$username,self::$password);
  14.  
  15. }
  16. catch(PDOExceptin $e)
  17. {
  18. $error=$e->getMessage();
  19. exit();
  20. }
  21. }
  22. return self::$db;
  23. }
  24.  
  25. }
  26.  


No i tutaj wszystko działa, problem rodzi się gdy chce coś dodać bo bazy, ładuje plik z klasą odpowiedzialną za łączenie z bazą danych require_once ('config.php'); zarówno w pliku index.php jak i pliku który przechowuje pozostałe klasy nowaclass.php. Zacząłem pisać klasę odpowiedzialną za tworzenie użytkownika,

  1. class Uzytkownik
  2. {
  3.  
  4. public function __construct()
  5. {
  6. $pdo = Database::getDB();
  7. }
  8.  
  9. public function addUser()
  10. {
  11.  
  12. $this->pdo -> exec('INSERT INTO `users` (`login`) VALUES(
  13. \'Login_Login\')');
  14.  
  15. }
  16.  
  17. }


Coś takiego nie przynosi rezultatu i oddaje błąd, że funkcją exec próbuje odwołać się do czegoś co nie jest obiektem
"Fatal error: Call to a member function exec() on a non-object"

Ale gdy tą metodę zrobię w ten sposób
  1. class Uzytkownik
  2. {
  3. public function addUser()
  4. {
  5. $pdo = Database::getDB();
  6. $this->pdo -> exec('INSERT INTO `users` (`login`) VALUES(
  7. \'Login_Login\')');
  8. }
  9.  
  10. }


Wszystko działa ok, stąd moje pytanie, jak zrobić iż globalnie tworzę obiekt $pdo = Database::getDB(); i nie muszę łączyć się z bazą danych za każdym razem w metodzie gdy chcę tego użyć ?
Opcjonalnie nie tylko w danej klasie ale także dla innych klas.

Ten post edytował hunter1988 2.06.2013, 11:00:58
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: 25.09.2025 - 21:26