Dzień dobry!
Mam pewien problem z dwiema sytuacjami, szukałem informacji w kursach PDO ale mam wrażenie że ten problem jest pomijany.... Dotyczy on zrywania połączenia z bazą danych w sytuacjach przerwania działania skryptu.
Przerywania działania skryptu a połączenie z bazą
W bloku try/catch nawiązałem połączenie z bazą. Wykonuję zapytanie i pojawiają się dwa przypadki, albo zapytanie się uda albo wystąpi niespodziewany błąd i wykonanie zapytania się nie uda. W takiej sytuacji dalsze instrukcje nie są wykonywane i miejsce wykonywania dalszego kodu zaczyna się w bloku catch. W tym bloku ustawiam komunikat o błędzie i np. przechodzę do innego pliku instrukcją header a skrypt kończę instrukcją exit(). Tylko pytanie czy w tym bloku catch powinienem zamknąć połączenie z bazą czy nie muszę ? Podobna sytuacja występuje gdy chcę przerwać działanie skryptu jeżeli z bazy zostaną zwrócone pewne rekordy bądź w tabeli nie będzie rekordów. Wtedy też muszę zamykać połączenie ?
if/else jeżeli w warunku są dwie opcje albo coś jest większe od zera albo mniejsze to wystarczy mi sprawdzić jeden z tych warunków if'em i jeżeli ten warunek nie zostanie spełniony to na 100% prawdziwy jest ten drugi więc jest sens żebym po takim if'ie z kodu poniżej dodawał else ? Elegancki kod ?
try
{
$db_connect = new PDO('mysql:host=localhost;dbname=DB_NAME;charset=utf8', 'user', 'paassword', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db_connect->prepare('SELECT * FROM TABLE WHERE email = :email');
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount() > 0)
{
// !!!!!!!!!!!!!!!!!!!!!!!!!!!
$db_connect = null;
$stmt = null;
header("Location: ../../index.php?content=singup");
exit();
}
}
catch(PDOException $e)
{
// !!!!!!!!!!!!!!!!!!!!!!!!!!!
$db_connect = null;
$stmt = null;
header("Location: error.php");
exit();
}
Ogólny plik dla połączenia z bazą
Czy funkcję zwracającą obiekt PDO mogę opakować w inną funkcję i tylko includować plik aby nie pisać w każdym pliku tego samego do obsługi błędów, nazwy bazy, nazwy użytkownika i hasła ? Czy to nie przeczy jakimś konwencjom ? Czy wyjątki zwracane przez tą funkcję będą obsługiwane ?
function connect_db_PDO()
{
return $db_connect = new PDO('mysql:host=localhost;dbname=DB_NAME;charset=utf8', 'user', 'paassword', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
Pozdrawiam!