Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Brak połączenia z MySQL pomimo dobrze działającej klasy konfiguracji
VIPPER_
post 29.12.2010, 14:30:33
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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. }


Ten post edytował VIPPER_ 29.12.2010, 18:46:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Mephistofeles
post 29.12.2010, 14:37:03
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Dlaczego używasz funkcji mysql_? To pamięta jeszcze czasy kamienia łupanego. Szczególnie, że zajmujesz się OOP, więc skorzystaj z PDO.
Go to the top of the page
+Quote Post
webdice
post 29.12.2010, 14:45:09
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Usuń @ sprzed mysql_connect, wyświetl to co Ci zwraca
  1. $this->init_get('database', 'host')
a dopiero później pisz na forum.
Go to the top of the page
+Quote Post
VIPPER_
post 29.12.2010, 14:54:07
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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.



Ten post edytował VIPPER_ 29.12.2010, 15:02:56
Go to the top of the page
+Quote Post
Zyx
post 29.12.2010, 14:59:02
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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ą.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
VIPPER_
post 29.12.2010, 15:03:03
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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.
Go to the top of the page
+Quote Post
thek
post 29.12.2010, 15:44:55
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
VIPPER_
post 29.12.2010, 16:00:31
Post #8





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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.
Go to the top of the page
+Quote Post
Mephistofeles
post 29.12.2010, 16:50:07
Post #9





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Pokaż klasę Init.
Go to the top of the page
+Quote Post
VIPPER_
post 29.12.2010, 17:03:33
Post #10





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


  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. }
Go to the top of the page
+Quote Post
Mephistofeles
post 29.12.2010, 17:08:45
Post #11





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Sprawdzałeś co zwraca var_dump z przeparsowanego ini? A potem funkcja init_get?
Go to the top of the page
+Quote Post
VIPPER_
post 29.12.2010, 18:47:38
Post #12





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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?
Go to the top of the page
+Quote Post
thek
post 29.12.2010, 22:36:25
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:59