poniedziałek, 11 maja 2015

[PHP][PDO] Podstawy cz.1 - połączenie z bazą danych

TRUE
1866009787045489141
Biblioteka PDO (PHP Data Objects) to interfejs służący do komunikacji z bazami danych. Stanowi ona więc warstwę pośredniczącą pomiędzy programistą, a serwerem bazodanowym. Takie rozwiązanie pozwala na wielką elastyczność, gdyż dzięki temu, iż tłumaczeniem wszystkich zapytań zajmuje się PDO to programista nie musi przygotowywać oddzielnych skryptów, czy klas dla różnych baz (a te różnią się między sobą składnią zapytań). PDO to oczywiście nie tylko ustandaryzowane API do komunikacji z bazami, ale i naprawdę bardzo potężna klasa, której możliwości sięgają daleko dalej, niż tylko do tłumaczenia zapytań. W kursie tym zajmiemy się podstawami, czyli połączeniem z bazą i nauką wszystkich podstawowych metod biblioteki PDO, które wymagane są do codziennej pracy z bazą danych.

Jak to działa?

Połączenie z bazą polega na utworzeniu nowego objektu klasy PDO. Do konstruktora klasy podajemy parametry naszego połączenia. W naszym przykładzie spróbujemy się połączyć z bazą MySQL, nic jednak nie stoi na przeszkodzie, aby wykorzystać inny adapter – tych PDO obsługuje dość dużo. Pełna (na chwilę obecną) ich lista znajduje się na końcu wpisu. Należy również oczywiście pamiętać, że rozszerzenie PDO dla PHP musi być zainstalowane i uruchomione w pliku php.ini.

Konstruktor klasy PDO

Konstruktor klasy PDO przyjmuje następujące parametry:
[code] $dsn = 'rodzaj_bazy:host=adres_serwera;port=port;encoding=kodowanie_znaków;dbname=nazwa_bazy';
$dbh = new PDO($dsn, $user,  $pass,  $opcje);[/code]

gdzie:
  • $dsn - podstawowe parametry połączenia
  • $user – nazwa użytkownika bazy
  • $pass – hasło użytkownika bazy
  • $opcje – tablica opcji [argument nie wymagany]

Należy zwrócić uwagę na składnię - najpierw podajemy rodzaj bazy (np. mysql), następnie po dwukropku podajemy konfigurację połączenia, gdzie parametry rozdzielamy średnikiem. Argument $opcje nie jest wymagany, jednakże warto zapoznać się z listą opcji jakie możemy tutaj ustawić. Wszystkie opisane zostały dokładnie w manualu, który znajduje się tutaj: http://php.net/manual/pt_BR/pdo.setattribute.php

Opcje dla połączenia możemy również ustawić później, służy do tego metoda statyczna:
[code]PDO::setAttribute ($opcja, $wartość);[/code]
Warto jednak pamiętać, iż opcja ustawiona za pomocą setAttribute() zaczyna działać od miejsca umieszczenia jej w kodzie.

Wartość ustawionego atrybutu pobieramy natomiast za pomocą:
[code]$wartość = PDO::getAttribute ($opcja);[/code]

Połączenie

Przykładowy kod połączenia z bazą danych może wyglądać tak jak na listingu poniżej.
Dane konfiguracyjne zapisane zostają tutaj przykładowo w tablicy $db_config:

[code] <?php

$db_config = array(
'host' => 'localhost',
 'port' => '3306',
 'user' => 'root',
 'pass' => 'password',
 'db' => 'myDatabase',
 'db_type' => 'mysql',
 'encoding' => 'utf-8'
);

// próba połączenia
try
{
 $dsn = $db_config['db_type'] .
 ':host=' . $db_config['host'] .
 ';port=' . $db_config['port'] .
 ';encoding=' . $db_config['encoding'] .
 ';dbname=' . $db_config['db'];

 // opcje, tutaj ustawienie trybu reagowania na błędy
 $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

 // tworzymy obiekt klasy PDO inicjując tym samym połączenie
 $dbh = new PDO($dsn, $db_config['user'],  $db_config['pass'], $options);

 // w przypadku błędu, poniższe się już nie wykona:
 define('DB_CONNECTED', true);
 echo '<h1>Connection success!</h1>';

  // łapiemy ewentualny wyjątek:
} catch(PDOException $e)
{
 die('Unable to connect: ' . $e->getMessage());
}
?>[/code]

Jeśli uda się nam połączyć z bazą to wyświetlona zostanie informacja Connection success! oraz zadeklarowana zostanie stała DB_CONNECTED o wartość TRUE, jeśli nie uda się uzyskać połączenia – rzucony zostanie wyjątek klasy PDOException i wyświetlony zostanie komunikat błędu.

Uwaga: za pomocą opcji:
[code]$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);[/code]
Ustawiliśmy tutaj tryb reagowania na błędy. Bardzo ważnym jest ustawienie tej opcji na rzucanie wyjątków, gdyż bez tego ustawienia w przypadku błędu PDO może nam wyrzucić na ekran informacje takie jak szczegółowe parametry połączenia (login do bazy etc...).

Możliwe ustawienia opcji PDO::ATTR_ERRMODE  to:
  • PDO::ERRMODE_SILENT - zwraca jedynie kody błędów
  • PDO::ERRMODE_WARNING -wyświetla ostrzeżenie E_WARNING.
  • PDO::ERRMODE_EXCEPTION - rzuca wyjątek

Try, catch

Bardzo ważną rzeczą związaną z powyższym jest, aby kod połączenia umieścić w bloku try{} i wyłapać ewentualnie rzucony wyjątek – w przeciwnym razie klasa PDO może wyrzucić na ekran parametry połączenia, a więc zdradzić informacje, takie jak nazwa użytkownika bazy i jego hasło.
[code]
try
{
   // kod połączenia
} catch(PDOException $e)
{
 die('Komunikat błędu: ' . $e->getMessage());
}[/code]

Rozłączenie

Rozłączenie z bazą jest banalnie proste i polega na przypisaniu wartości NULL do obiektu:
[code]$dbh = null;[/code]

Obsługiwane bazy danych

Poniżej pełna lista wspieranych na chwilę obecną baz danych, zaczerpnięta z manuala:


  • CUBRID - cubrid:
  • MS SQL Serverdblib:
  • Firebird firebird:
  • IBM - ibm:
  • Informixinformix:
  • MySQLmysql:
  • MS SQL Server (PDO) - sqlsrv:
  • Oracleoci:
  • ODBC i DB2 - odbc:
  • PostgreSQLpgsql:
  • SQLitesqlite:
  • 4D - 4d:

Umiemy już połączyć i rozłączyć się z bazą danych, zatem w następnej części nauczymy się pobierania rekordów. Przypominam na koniec raz jeszcze, aby dobrze zapamiętać poradę odnośnie rzucania wyjątków podczas błędów z połączeniem - jest to naprawdę kluczowa sprawa podczas pracy z PDO na wersji produkcyjnej aplikacji, do której dostęp mają wszyscy.


Oficjalny, pełny manual biblioteki PDO znajduje się tutaj: http://php.net/manual/en/book.pdo.php

10 komentarzy:

  1. Dominik Żyłko13 sierpnia 2018 21:42

    Fajne i ciekawe podejście do DPO czyli obiektowego kodowania w PHP. Absolutnie niezbędna nauka dla każdego kto widzi się w przyszłości w branży IT i chce z tą gałęzią wiązać swoją przyszłość. Projektując systemy czy aplikacje jak robi to https://craftware.pl znanie DPO w PHP jest wręcz niezbędne, gdyż jest ono wykorzystywane w pracy codziennej. Jakby nie było jest to przyszłość programowania czyli kodowanie obiektowe.

    OdpowiedzUsuń
    Odpowiedzi
    1. Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download Now

      >>>>> Download Full

      Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download LINK

      >>>>> Download Now

      Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download Full

      >>>>> Download LINK B9

      Usuń
  2. Dziękuję bardzo za udostępnienie tak kompletnego kursu z PHP. Moją przygodę z programowaniem zaczęłam od połączeni teorii z praktyką. Ostatnio przekonałam się dzięki https://www.connecto.pl/system-informatyczny-potrzebny-firmie/, że faktycznie systemy informatyczne w firmach mają rację bytu i powinny być wdrażane.

    OdpowiedzUsuń
  3. Bardzo ciekawy poradnik. Jestem informatykiem i właśnie szukałem takich informacji. W dzisiejszych czasach internet odgrywa ważną rolę w nauce. Kiedyś nie było takich możliwości i jedynym wyjściem oprócz szkolnych ławek były tylko książki o tej tematyce :)

    OdpowiedzUsuń
  4. W tym przypadku nw czy nie lepszym pomysłem byłoby użycie stałych dla takich danych jako poświadczenia do bazy danych ;)

    OdpowiedzUsuń
  5. Fajny artykuł. Pozdrawiam serdecznie.

    OdpowiedzUsuń
  6. Ja niestety aż tak się na samym programowaniu nie znam, ale jak najbardziej używam chętnie u siebie w firmie rozwiązań informatycznych. Udało mi się również niedawno trafić na wpis https://www.sn2.eu/biznesowo/18849-utrzymanie-i-rozwoj-systemu-crm-dlaczego-jest-wazne.html gdzie dokładnie jest opisane dlaczego rozwój i utrzymanie systemu CRM jest ważne dla naszego przedsiębiorstwa.

    OdpowiedzUsuń
  7. Moim zdaniem bardzo fajnie opisany problem. Pozdrawiam serdecznie.

    OdpowiedzUsuń
  8. Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download Now

    >>>>> Download Full

    Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download LINK

    >>>>> Download Now

    Php Majster: [Php][Pdo] Podstawy Cz.1 - Połączenie Z Bazą Danych >>>>> Download Full

    >>>>> Download LINK

    OdpowiedzUsuń

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji