Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Błąd połączenia PDO (Programowanie obiektowe)
Kerth
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cześć,
próbuję zrozumieć co jest źle w poniższym kodzie, że pojawiaja się ostrzeżenia. Co robię źle?
  1. class __construct{
  2. private $host = "localhost";
  3. private $username = "root";
  4. private $password = "pass";
  5. private $database = "database";
  6.  
  7. public function SQLConnection($host, $username, $password, $database){
  8. try{
  9. $db = new PDO('mysql:host='.$host.';dbname='.$database.'', ''.$username.'', ''.$password.'',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  10. echo 'Połączenie nawiązane!';
  11. }catch(PDOException $e){
  12. echo 'Połączenie nie mogło zostać utworzone.';
  13. }
  14.  
  15. }


Kod
Warning: Missing argument 1 for __construct::SQLConnection(), called in C:\WebServ\httpd\oop_mvc\index.php on line 12 and defined in C:\WebServ\httpd\oop_mvc\controller\ConfigDatabase.class.php on line 18

Warning: Missing argument 2 for __construct::SQLConnection(), called in C:\WebServ\httpd\oop_mvc\index.php on line 12 and defined in C:\WebServ\httpd\oop_mvc\controller\ConfigDatabase.class.php on line 18

Warning: Missing argument 3 for __construct::SQLConnection(), called in C:\WebServ\httpd\oop_mvc\index.php on line 12 and defined in C:\WebServ\httpd\oop_mvc\controller\ConfigDatabase.class.php on line 18

Warning: Missing argument 4 for __construct::SQLConnection(), called in C:\WebServ\httpd\oop_mvc\index.php on line 12 and defined in C:\WebServ\httpd\oop_mvc\controller\ConfigDatabase.class.php on line 18
Połączenie nawiązane!
Fatal error: Call to a member function query() on a non-object in C:\WebServ\httpd\oop_mvc\controller\ConfigDatabase.class.php on line 28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Boshi
post
Post #2





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Jeżeli już to konstruktor powinien łączyć się z bazą przy tworzeniu instancji klasy. Nie robi się etykiet publicznych-łamiesz jedną z podstawowych zasad OOP- hermetyzacje. Nie wiem po co też tworzysz funkcje przyjmująca parametry a przy tym deklarujesz pola publiczne z danymi.
Tak jak kolega com. napisał, do zmiennych wewnątrz klasy odwołujemy się po przez $this->zmienna. A po to jest to zrobione by wiedzieć która zmienna jest lokalną a która polem klasy. ufff

  1. class first
  2. {
  3. private $field;
  4. public function __construct($field)
  5. {
  6. $this->field=$field;
  7. }
  8. public function Get()
  9. {
  10. echo $this->field;
  11. }
  12. }//end class


  1. class Database{
  2.  
  3.  
  4. public function __construct($host, $database, $username,$pass )
  5. {
  6.  
  7. try
  8. {
  9. $db = new PDO('mysql:host='.$host.';dbname='.$database, $username,$pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  10. echo 'Połączenie nawiązane!';
  11. }
  12. catch(PDOException $e)
  13. {
  14. echo 'Połączenie nie mogło zostać utworzone.'.$e->getMessage();
  15. }
  16. }
  17.  
  18. }
  19.  
  20.  
  21. $host = "localhost";
  22. $username = "root";
  23. $password = "";
  24. $database = "portal";
  25. $ob=new Database($host,$database,$username,$password);


Edit: @up poprawione (IMG:style_emoticons/default/smile.gif)

Ten post edytował Boshi 10.03.2015, 02:46:00
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: 7.10.2025 - 17:53