• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zrywanie połączenia z bazą danych przy kończeniu działania skryptu PHP

Object Storage Arubacloud
0 głosów
999 wizyt
pytanie zadane 26 lipca 2017 w SQL, bazy danych przez kevin Mądrala (5,010 p.)

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!

1 odpowiedź

0 głosów
odpowiedź 26 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)

Kiedy kończy się skrypt, połaczenie z bazą jest zamykane automatycznie. Koniec dalszych linii kodu, lub użycie funkcji die() lub exit() kończy działanie skryptu. Interpreter nic poniżej tych linii kodu już nie sprawdza. 

$db_connect = null;
$stmt = null;

Te linie kodu są zbędne. Zarówno w try, jak i catch. Gdybyś miał zamiar w tym skrypcie dalej klepać kod, to ok, można tak zrobić, ale wystarczy $db_connect = null;


Jasnę, ze możesz ją opakować w funkcje. Możesz nawet rozdzielić ten ciąg znaków z konfiguracją do 3 różnych zmiennych, aby mieć ułatwioną konfiguracje.

komentarz 26 lipca 2017 przez kevin Mądrala (5,010 p.)

W taki sposób ?

$db_host = 'localhost';
$db_name = 'Moja Baza Danych';
$db_user = 'user';
$db_password = 'pass';

function connect_db_PDO()
{
    return $db_connect = new PDO('mysql:host='.$db_host.';dbname='.$db_name.';charset=utf8', $db_user, $db_password, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}

 

komentarz 26 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Te zmienne mozesz do funkcji włożyć. Żeby przypadkiem nie zostały nadpisane przy używaniu require lub include.

Podobne pytania

0 głosów
2 odpowiedzi 401 wizyt
0 głosów
2 odpowiedzi 1,022 wizyt
0 głosów
1 odpowiedź 644 wizyt
pytanie zadane 7 grudnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...