Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]PDO nowe polaczenie
Forum PHP.pl > Forum > Przedszkole
Raven1122
Witam zaczynam bawic sie z obiektowka, napisalem takie cos:

  1. <?php
  2.  
  3. class mysql {
  4.  
  5. function connect(){
  6.  
  7. define("HOST", "localhost");
  8. define("USERNAME", "user");
  9. define("PASSWORD", "password");
  10. define("DB", "database");
  11.  
  12. $conn = new PDO(HOST:DB, USERNAME, PASSWORD);
  13. }
  14.  
  15. }
  16.  
  17. ?>


Czy jest to dobrze sformulowane?? Prosze o porady itd. Z gory dziekuje smile.gif
b4rt3kk
Masz zamiar definiować stałe za każdym razem gdy będziesz nawiązywał połączenie z bazą danych? Poza tym by się przydało żeby funkcja zwracała uchwyt do bazy.

  1. return $conn;


A właściwie to takie masło maślane, opakowanie obiektu klasy w inny obiekt klasy. Tak wywołujesz PDO:

  1. $conn = new PDO(HOST:DB, USERNAME, PASSWORD);


a tak swoją klasę:

  1. $mysql = new mysql;
  2. $conn = $mysql->connect();


co i tak nie zadziała, bo nie zwraca uchwytu.

Jeśli już to tak:

  1. <?php
  2. define("HOST", "localhost");
  3. define("USERNAME", "user");
  4. define("PASSWORD", "password");
  5. define("DB", "database");
  6.  
  7. class mysql {
  8.  
  9. public $host;
  10. public $user;
  11. public $pass;
  12. public $db;
  13.  
  14. function __construct() {
  15. $this->host = HOST;
  16. $this->user = USERNAME;
  17. $this->pass = PASSWORD;
  18. $this->db = DB;
  19. }
  20.  
  21. function connect(){
  22.  
  23. $conn = new PDO($this->host:$this->db, $this->user,$this->pass);
  24. return $conn;
  25. }
  26.  
  27. }
  28.  
  29. ?>
Raven1122
czyli jezeli dam

  1. $conn = new PDO($host:$db, $username, $password);


to na dol musze jesczze zwrocic uchwyt jako :

  1. $conn = new PDO($host:$db, $username, $password);
  2. return $conn;


tak?

i wtedy jak chce wydac jakies polecenia typu

  1. $conn->exec("SQL")


to juz bedzie wszystko dzialalo?
b4rt3kk
  1. $conn->exec("SQL")


tak będzie działało, jeśli masz na myśli, że po takim wywołaniu:

  1. $mysql = new mysql;
  2. $conn = $mysql->connect();


ale zaznaczam, że definiowanie stałych przy każdym połączeniu mija się z celem zupełnie.
Raven1122
a mozecie mi pokazac jaki nawiazywanie takiego polaczenia wyglada profesjonalnie? czyli taki wzorzec ktorym moglbym sie kierowac
Damonsson
Ja tam nie wiem jak wygląda profesjonalnie, ale przykładowo:

config.php:
  1. define('DB_TYPE', 'mysql');
  2. define('DB_HOST', 'localhost');
itd.

Database.php
  1. class Database extends PDO {
  2. public function __construct($DB_TYPE, $DB_HOST, $DB_NAME, $DB_USER, $DB_PASS) {
  3. parent::__construct($DB_TYPE . ':host=' . $DB_HOST . ';dbname=' . $DB_NAME, $DB_USER, $DB_PASS);
  4. }
  5. public function selectAll($sql, $array = array(), $fetchMode = PDO::FETCH_ASSOC) {
  6.  
  7. $sth = $this->prepare($sql);
  8.  
  9. foreach ($array as $key => $value) {
  10. $sth->bindValue("$key", $value);
  11. }
  12.  
  13. $sth->execute();
  14. return $sth->fetchAll($fetchMode);
  15. }
  16. }


Model.php
  1. class Model {
  2.  
  3. public function __construct() {
  4. $this->db = new Database(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS);
  5. }
  6.  
  7. }



i w jakimś tam przykładowym pliku gdzie będę korzystał z bazy danych:
  1. class User_Model extends Model {
  2. public function __construct() {
  3. parent::__construct();
  4. }
  5. public function userSelectAll() {
  6. return $this->db->selectAll("SELECT id, login, role FROM user");
  7. }
  8. }



Przy okazji, ktoś kto wie jak to powinno być profesjonalnie, może zweryfikować, czy to jest ok, sam się może czegoś nauczę nowego 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.