Polecenie pg_connect języka PHP służy do połączenia się z bazą
A. mySQL
B. PostgreSQL
C. MS ACCESS
D. MS SQL
Pytanie z egzaminu CKE, wrzesień 2015 (arkusz E.14-X-15.08).
Funkcja pg_connect() w PHP służy do nawiązania połączenia z bazą danych PostgreSQL, więc odpowiedź PostgreSQL jest właściwa. Przedrostek pg w nazwach funkcji PHP odnosi się właśnie do PostgreSQL, np. pg_query(), pg_fetch_assoc() czy pg_close(). W praktyce pg_connect() przyjmuje ciąg połączenia zawierający takie dane jak host, port, nazwa bazy, użytkownik i hasło, np. host=localhost port=5432 dbname=sklep user=admin password=haslo. To typowy sposób pracy w starszych albo prostszych aplikacjach PHP, choć w nowych projektach często zaleca się używanie PDO, bo daje bardziej jednolity interfejs do różnych silników baz danych. Moim zdaniem warto jednak znać funkcje pg_, bo na egzaminach i w pracy przy istniejących systemach pojawiają się całkiem często. Dobra praktyka to nie wpisywać danych dostępowych bezpośrednio w wielu plikach, tylko trzymać je w konfiguracji, ograniczać uprawnienia użytkownika bazy oraz stosować zapytania parametryzowane, żeby nie narobić problemów z SQL Injection.
W tym pytaniu łatwo pomylić nazwy technologii, bo wszystkie odpowiedzi dotyczą baz danych lub systemów używanych przy aplikacjach webowych. Klucz jest jednak w samej nazwie funkcji pg_connect(). Skrót pg w PHP oznacza obsługę PostgreSQL, a nie dowolne połączenie z bazą. To nie jest uniwersalna funkcja do każdego silnika SQL. Do MS SQL używa się innych mechanizmów, na przykład rozszerzenia sqlsrv albo PDO z odpowiednim sterownikiem, zależnie od konfiguracji serwera. MS Access też nie pasuje, bo jest raczej plikową bazą danych z ekosystemu Microsoftu i w PHP nie obsługuje się jej przez funkcje pg_. Dawniej spotykało się połączenia przez ODBC, ale to zupełnie inna warstwa dostępu. MySQL również ma własne rozwiązania, takie jak mysqli_connect() albo PDO z driverem mysql. Typowy błąd myślowy polega na tym, że ktoś widzi connect i zakłada, że chodzi ogólnie o łączenie z bazą, bez patrzenia na przedrostek funkcji. W PHP te przedrostki są bardzo ważne: mysqli_ wskazuje MySQL, pg_ wskazuje PostgreSQL, a sqlite_ odnosi się do SQLite. Z mojego doświadczenia najlepiej uczyć się tych nazw razem z przykładowymi funkcjami zapytań, bo wtedy od razu widać, z jakim systemem bazodanowym dana biblioteka współpracuje. W realnym projekcie zły wybór funkcji nie skończy się tylko słabą odpowiedzią w teście, ale błędem działania aplikacji, brakiem połączenia albo koniecznością instalacji innego rozszerzenia PHP.