Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Brak połączenia z MySQL pomimo dobrze działającej klasy konfiguracji
Forum PHP.pl > Forum > Przedszkole
VIPPER_
Hej, z OOP dopiero zaczynam. Napisałem sobie klasę konfiguracyjną, która działa prawidłowo. Pobiera ona dane z ini.
Jednak gdy używam kolejnej klasy do połączenia z MySQL - nie mogę się połączyć.

  1. class ConnectDatabase extends Init
  2. {
  3.  
  4. private $_connection;
  5.  
  6. public function Connect()
  7. {
  8.  
  9. $this->_connection = @mysql_connect($this->init_get('database', 'host'), $this->init_get('database', 'username'),$this->init_get('database', 'password'));
  10.  
  11. if($this->_connection)
  12. {
  13. return 'CONNECTED';
  14. }
  15. else {
  16. return 'ERR_ NOT_CONNECTED';
  17. }
  18.  
  19. }
  20.  
  21. }
Mephistofeles
Dlaczego używasz funkcji mysql_? To pamięta jeszcze czasy kamienia łupanego. Szczególnie, że zajmujesz się OOP, więc skorzystaj z PDO.
webdice
Usuń @ sprzed mysql_connect, wyświetl to co Ci zwraca
  1. $this->init_get('database', 'host')
a dopiero później pisz na forum.
VIPPER_
Gdy użyłem PDO wyrzuciło mi:

  1. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host


Z kolei usuwając @ sprzed mysql_connect nic się nie wyświetla.

Zyx
Przecież w komunikacie masz jasno napisane, w czym jest problem: nie można znaleźć serwera bazy danych. A zamiast to naprawić, używasz elementów składni, których działania nie rozumiesz. Pomijam już fakt, że problem nie ma nic wspólnego z obiektówką.
VIPPER_
Cytat(Zyx @ 29.12.2010, 14:59:02 ) *
Przecież w komunikacie masz jasno napisane, w czym jest problem: nie można znaleźć serwera bazy danych. A zamiast to naprawić, używasz elementów składni, których działania nie rozumiesz. Pomijam już fakt, że problem nie ma nic wspólnego z obiektówką.


Tylko że wszystkie dane odnośnie MySQL podaje poprawnie. Nie wiem z czym to jest związane, a że zacząłem bawić się z OOP to wrzuciłem to tutaj. Jeżeli pomyliłem działy to sorry.

Co ciekawe... korzystając z PDO gdy podałem dane username, password itd. na sztywno - zadziałało. Tak samo dzieje się z mysql_connect. Ale gdy użyje klasy Init przestaje działać, choć gdy sprawdzałem jej działanie to wszystko jest w porządku.
thek
W takim razie dane "gubi" po drodze. Lepiej sprawdź, czy są one prawidłowo w klasie init ustawione. A może mają one ustawiony atrybut dostępu private? Domyślnie takie dane w klasie potomnej "giną". Po prostu nie są dziedziczone smile.gif
VIPPER_
Cytat(thek @ 29.12.2010, 15:44:55 ) *
W takim razie dane "gubi" po drodze. Lepiej sprawdź, czy są one prawidłowo w klasie init ustawione. A może mają one ustawiony atrybut dostępu private? Domyślnie takie dane w klasie potomnej "giną". Po prostu nie są dziedziczone smile.gif


Funkcje mam public. Same zmienne w init owszem były ustawione na private jednak po zmianie na public i tak nadal nie działa.
Mephistofeles
Pokaż klasę Init.
VIPPER_
  1. class Init
  2. {
  3.  
  4. public $__data;
  5.  
  6. public function __construct()
  7. {
  8. $this -> __data = parse_ini_file('config.system.php', true);
  9. }
  10.  
  11. public function init_get($section, $name)
  12. {
  13. if(!isset($this -> __data[$section]))
  14. {
  15. return 'ERR_NOT_INITIALIZED Missed section "'.$section.'"';
  16. }
  17. if(!isset($this -> __data[$section][$name]))
  18. {
  19. return 'ERR_NOT_INITIALIZED Missed directive "'.$name.'"';
  20. }
  21. return $this -> __data[$section][$name];
  22. }
  23.  
  24. }
Mephistofeles
Sprawdzałeś co zwraca var_dump z przeparsowanego ini? A potem funkcja init_get?
VIPPER_
var_dump z ini zwraca:

  1. array(3) { ["database"]=> array(4) { ["host"]=> string(17) "***”" ["username"]=> string(14) "***”" ["password"]=> string(10) "“***”" ["database"]=> string(12) "***" } ["paths"]=> array(2) { ["path_to_php_classes"]=> string(14) "“/my/classes/”" ["path_to_images"]=> string(13) "“/my/images/”" } ["numbers"]=> array(2) { ["number_of_news"]=> string(3) "“5”" ["number_of_images_on_slide"]=> string(4) "“12”" } }


Jeżeli chodzi o init_get. Czy powiniennem to wywołać w ten sposób(?):

  1. var_dump($systemInit->init_get('database', 'password'))


Bo jeżeli tak, to nic nie zwraca (questionmark.gif).



Czy naprawdę nikt nie jest w stanie mi pomóc?
thek
Pytanie zasadnicze... Czego brakuje Ci w klasie ConnectDatabase? Ja nie widzę żadnego konstruktora! A jak klasa ma utworzyć nowy obiekt, skoro nie wie jak? Jeśli chcesz by było to robione identycznie jak w klasie bazowej, to musisz to klasie potomnej "powiedzieć" wyraźnie smile.gif Inaczej zna ona funkcje, ale nie wszystkie. Zrobi ona swój własny, domyślny konstruktor, który akurat z konstruktorem rodzica nie ma nic wspólnego. Klasa potomna chce wiec użyć metody init_get znanej rodzicowi bo ją dziedziczy. Problem w tym, że kompletnie nie ma pojęcia o danych parsowanych w konstruktorze rodzica, bo to nigdy nie zachodzi.
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.