Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyjatki
Forum PHP.pl > Forum > PHP
koodlaty
Gmeram sobie i gmeram po necie - bezskutecznie.

Kto mi powie jak ustawić sobie globalnie - dla wszystkich tworzonych instancji PDO, zwracanie błędów za pomocą wyjątków? Czyli dla wszystkich obiektów:
  1. <?php
  2. setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
  3. ?>

Kto ma głębsze doświadczenia z PDO i mi podpowie blinksmiley.gif ?
dtb
nie testowane
  1. <?php
  2. function newpdo($dsn, $user='', $pass='', $driver='') {
  3. if (is_array($driver))
  4.  $pdo = new pdo($dsn, $user, $pass, $driver);
  5. else
  6.  $pdo = new pdo($dsn, $user, $pass);
  7. }
  8. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  9. return $pdo;
  10. }
  11.  
  12. $obiekt = newpdo('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass');
  13. ?>
koodlaty
Spoko, spoko - tego typu sztuczki pewnie okażą się skuteczne. Na mój gust jednak mało eleganckie. Nie dyskutujmy jednak o gustach...

Chciałbym wiedzieć jak skonfigurować sobie klasę PDO, a nie tworzone obiekty. Czy w ogóle jest to możliwe?

Wyobrażam to sobie jakoś tak:
  1. <?php
  2. PDO::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
  3. ?>
Niestety tego typu eksperyment powoduje wywalenie Apache-a.

No chłopaki, kto już ujeździł PDO - standard przyszłości? smile.gif
dtb
dlaczego "malo eleganckie"? a takie cos:

  1. <?php
  2.  
  3. class mypdo extends pdo {
  4. public function __construct($dsn, $user='', $pass='', $driver='') {
  5. if (is_array($driver))
  6. parent::__construct($dsn, $user, $pass, $driver);
  7. else
  8. parent::__construct($dsn, $user, $pass);
  9. $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. }
  11. }
  12.  
  13. $pdo = new mypdo('mysql:dbname=test;host=127.0.0.1', 'root', '');
  14.  
  15. ?>


obawiam sie, ze inaczej sie nie da :/
koodlaty
Tak - takiego rozwiązania używam obecnie. Nie wiem jednak czy jest sens stosować dziedziczenie nadpisując jedną tylko metodę, tylko po to by zmienić jedną opcje...

Wiele klas możemy skonfigurować przed użyciem - stąd pytanie - czy nie da się zrobić tego z PDO?

PS Po co stawiasz public przed konstuktorem?
mike
Cytat(koodlaty @ 28.11.2006, 23:12:36 ) *
PS Po co stawiasz public przed konstuktorem?

Pewnie po to żeby był publiczny tongue.gif
Przecież równie dobrze może być prywatny.
NuLL
Nie da sie czegos takiego zrobic - atrybuty sa przypisywanie inwidualnie dla kazdego z polaczen.
dr_bonzo
Cytat
Nie wiem jednak czy jest sens stosować dziedziczenie nadpisując jedną tylko metodę, tylko po to by zmienić jedną opcje...

A jesli tego nie zastosujesz to co ci zostanie? Po kazdym utworzeniu nowego PDO ustawianie trybu wyrzucania wyjatkow (swoja droga wybrali kiepskie zachowanie domyslne, przeciez to php 5.1 i ludzie go uzywajacy znaja sie na obsludze wyjatkow i chca jej uzywac) -- wiecej pisania i nowe okazje do bledow -- gdzies zapomnisz i co?

Pozostaje ci jeszcze wzorzec Rejestr -- raz laczysz sie z baza i przechowujesz w nim polaczenie.
koodlaty
Cytat(mike_mech @ 29.11.2006, 00:17:13 ) *
Pewnie po to żeby był publiczny tongue.gif
Przecież równie dobrze może być prywatny.

Jasne, że może ale publiczny jest domyślnie.
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.