Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]PDO jako plik klasy
Forum PHP.pl > Forum > Przedszkole
vegeta
Witam.
Przepisuję grę na obiektówkę. Mam problem z przepisaniem łączenia PDO na osobny plik klasy.

  1. <?php
  2. class pedeobaza {
  3. public $pdo;
  4. private static $host = 'host';
  5. private static $login = 'XXX';
  6. private static $haslo = 'YYY';
  7. private static $db = 'game';
  8.  
  9. public function __construct() {
  10. $this -> pdo = new PDO('mysql:host='.self::$host.';dbname='.self::$db.'', self::$login, self::$haslo);
  11. $this -> pdo -> exec("SET CHARACTER SET utf8");
  12. }
  13. }
  14. ?>


w header.php robie
  1. require_once 'klasy/pedeobaza.php';
  2. $pedeobaza = new pedeobaza();


Jak teraz w innych plikach mogę wykonać zapytanie do bazy?
Poprzednio miałem: $pre = $pedeo -> prepare(....);

I jeszcze jedno. Dobrze mam napisaną klasę PDO jako klasę mojej gry?

//EDIT
Aktualizacja kodu.
Zapytanie wykonuję tak:
$pre = $baza -> pdo -> prepare(...);
Fifi209
Przecież tego nie można nazwać klasą tylko jakimś pseudokodem.

Jak w innych plikach? To chyba model ma pobierać dane z bazy i dostarczać do widoku.
vegeta
Nie używam MVC.
Fifi209
To przynajmniej includuj do indexu
vegeta
1. Po co mam includowac do indexu, gdzie nie ma żadnego zapytania, do wszystkich stron dołączam header.php i w nim jest jedno zapytanie.
2. Czy klasa jest dobra?

BTW zmieniłem require na require_once tak jak miałem to przed klasami.
user767
  1. require_once('classes/class_db.php');
vegeta
@up
jest jakaś różnica między tym co podałeś, a require_once 'klasy/pedeobaza.php';, bo nie ma chyba żadnej ?
Daiquiri
Nie bardzo rozumiem Twoją konstrukcję, ale skoro masz public $pdo to odwołuj się do niego poprzez instancję klasy pedeobaza. Opcjonalnie zbuduj zestaw metod, które będą korzystały z $pdo.
Fifi209
Opakowanie PDO klasą, która nic nie robi poza łączeniem jest totalnie bez sensu. Tyle w temacie.
Qbexus
Przyłącze się do tematu. Jak Waszym zdaniem najlepiej zrealizować łączenie się skryptu z bazą z wykorzystaniem PDO? Chodzi o to aby dane do bazy leżały w jednym miejscu i żeby za każdym razem gdy trzeba wykonać zapytanie do bazy nie podawać jakichś skomplikowanych konstrukcji tylko coś w stylu connect() i tyle.
Fifi209
Jak już napisałem:
Cytat(Fifi209 @ 2.07.2011, 11:50:39 ) *
Opakowanie PDO klasą, która nic nie robi poza łączeniem jest totalnie bez sensu. Tyle w temacie.


Utwórz sobie plik, w którym połączysz się z bazą i includuj go tam gdzie potrzebujesz. ew. możesz wrzucić obiekt do klasy registry (taki wzorzec loool) mieć coś jak globalną zmienną
Qbexus
A jak Wy to realizujecie? Jak jest najwydajniej i najprościej? nie sądzę żebyście za każdym razem wklepywali try itp.
muk4
Funkcja która zwraca obiekt PDO:
  1. function connectToDatabase(){
  2. $h = 'hostname';
  3. $db = 'dbname';
  4. $u = 'usr';
  5. $p = 'pass';
  6. try{
  7. $pdo = new PDO("mysql:host=$h;dbname=$db", $u, $p);
  8. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  9. $pdo->query('SET NAMES utf8');
  10. }catch(PDOException $e){
  11. die('Nie można się połączyć...');
  12. }
  13. return $pdo;
  14. }

Zamiast zmiennych lepiej użyć tablicy np $config['user'] itp.
Fifi209
Cytat(muk4 @ 13.07.2011, 23:43:33 ) *
Zamiast zmiennych lepiej użyć tablicy np $config['user'] itp.

W ogóle to parametry powinny być przekazywane do funkcji jako argumenty.
muk4
@Fifi209
Traktuje to raczej jako odrębny kawałek kodu , tak żeby tylko wywołać $pdo = connectToDatabase(); i spokój.
Crozin
Cytat
A jak Wy to realizujecie? Jak jest najwydajniej i najprościej?
Dependency Injection -w sumie to standardowa metoda.
Cytat
nie sądzę żebyście za każdym razem wklepywali try itp.
Bloku try .. catch używasz, gdy chcesz coś z wyrzuconym wyjątkiem zrobić, a nie gdy jakiś fragment po prostu go rzuca.
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.