Mam na myśli używanie PDO we wszystkich moich przyszłych aplikacjach internetowych. Obecnie (za pomocą czego się nauczyłem z tak do tej pory), co mam w miejscu do obsługi połączenia z bazą danych jest klasą Singleton tak:Używanie PDO w funkcjach w funkcjach
class DB {
private static $instance = NULL;
private static $dsn = "mysql:host=localhost;dbname=mydatabase;";
private static $db_user = 'root';
private static $db_pass = '0O0ooIl1';
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance() {
if (!self::$instance)
{
self::$instance = new PDO(self::$dsn, self::$db_user, self::$db_pass);
self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
}
i inny plik (functions.php) o zawartości specyficznych funkcje patrząc dokładnie tak jak ten:
function get_recent_activities()
{
try
{
$db = DB::getInstance();
// --prepare and execute query here, fetch the result--
return $my_list_of_recent_activities;
}
catch (PDOException $e)
{
return "some fail-messages";
}
}
...
co oznacza, że muszę powtórzyć try .. catch
udział we wszystkich funkcjach.
Moje pytania są następujące:
- W jaki sposób należy zrobić to bardziej wydajny? (np. nie muszą powtarzać
try..catch
we wszystkich funkcjach, a mimo to wciąż mogą zwracać różne "komunikaty o błędach" na każdym z nich) - Czy to już jest dobra praktyka? Wciąż jestem nowy w PDO i OOP (jeszcze wiele do nauczenia się), więc (od teraz) nie widzę żadnych wad ani rzeczy, które można poprawić.
Przykro mi, jeśli to wydaje się niejasne lub zbyt długie. Z góry dziękuję.
Na sekundę, co pd mówi, moje użycie niestandardowej klasy błędów po prostu rejestruje błąd w db i wysyła mi e-mail. Użytkownik końcowy nigdy nie widzi śladów stosu lub innych nieprzyjemności. Dlatego jeśli wystąpił błąd, zwracam wartość false, a następnie przetestuj wartość zwracaną przez moje zapytanie, aby określić, co powiedzieć użytkownikowi: –
Jeśli zmienisz SELECT i/lub inne zapytanie zmieniło bazę danych, to SELECT już nie działa: Ty nigdy o tym wiedz, dopóki sam nie przetestujesz swojej strony. Jest to nieproduktywne. try/catch jest niezbędny dla każdego zapytania! – mgutt