background image

 

 

Podstawy programowania

PHP5 - PostgreSQL

background image

 

 

PostgreSQL

• System zarządzania bazami danych 

PostrgreSQL, jest podobnie jak MySQL, jest 
projektem Open Source.

• Bazy danych PostgreSQL nie są tak szybkie 

jak bazy danych MySQL, ale za to 
implementacja języka SQL wbudowana w 
PostgreSQL jest dużo bardziej rozbudowana 
w porównaniu do MySQL.

• Kod źródłowy aktualnej wersji PostgreSQL jes 

dostępny na witrynie 

http://postgresql.com

background image

 

 

Nawiązanie połączenia z 

serwerem

• Aby nawiązać połączenie z serwerem bazy danych 

PostgreSQL należy skorzystać z funkcji PHP5 

pg_connect().

• Składnia funkcji jest następująca:

<?php

resource pg_connect( string parametry_połączenia);

?>

• Funkcja zwraca obiekt resource reprezentujący 

połączenie z bazą danych. Ciąg może zawierać takie 

parametry jak:

– host, nazwa serwera na którym uruchomiona jest baza danych
– port, numer portu na którym serwer bazy danych nasłuchuje 

połączenia

– dbname, nazwa bazy danych, z którą łączy się procesor PHP5
– user, nazwa użytkownika bazy danych
– password, hasło użytkownika user.

background image

 

 

Przykład nawiązania 

połączenia 

• Nawiązanie połączenia z bazą danych PostgreSQL

<?php
$identyfikator = pg_connect(‘host=localhost 

dbname=moja_baza user=testowy’);

echo($identyfikator);
?>

• Serwerem bazy danych jest tu localhost, co oznacza 

że jest to ten sam komputer na którym uruchomiony 
został serwer WWW.

• Interpreter PHP5 próbuje połączyć się z bazą danych 

moja_baza jako użytkownik testowy. 

• W wyniku na przeglądarce powinien pojawić się tekst 

Resource id #1.

• Uwaga: próba nawiązania kolejnego połączenia o 

identycznych parametrach spowoduje odwołanie się 
do istniejącego połączenia.

background image

 

 

Zamykanie połączenia 

z bazą danych

Po nawiązaniu połączenie z serwerem bazy danych 

będzie trwało, dopóki nie zostanie zakończony skrypt, 

który zainicjował połączenie, lub póki nie zostanie 

ono zamknięte funkcją pg_close( ).

Przykład użycia funkcji pg_close( )

<?php

bool pg_close([resource identyfikator]);

?>

Zakładamy, że identyfikator jest identyfikatorem 

połączenia z bazą danych, który został utworzony po 

poprawnym wywwołaniu funkcji pg_connect( ). 

Funkcja zwraca wartość TRUE, jeśli wywołanie się 

powiedzie albo FALSE w przeciwnym przypadku.

Jeśli argument funkcji pg_close( ) nie zostanie 

podany, funkcja zamknie ostatnie utworzone 

połączenie.

background image

 

 

Brak możliwości połączenia 

z bazą danych

• Jeżeli interpreter PHP5 nie będzie mógł nawiązać 

połączenia z serwerem bazy danych, w przeglądarce 
WWW zostanie wyświetlony komunikat o błędzie 
podający przyczynę wystąpienia błędu, 

Warning: pg_connect( ) [function.pg_connect]: Unable to 
connect to PostgreSQL server:
FATAL: user ”testowy” does not exist in skrypt.php on line 1

• Dodatkowo funkcja pg_connect( ) zwróci wartość 

FALSE zamiast identyfikatora połączenia.

• Jeśli nie będziemy chcieli, aby PHP5 nie wyświetlał 

wyżej pokazanego błędu, możemy postawić przed 
instrukcją operator kontroli błędów @.

background image

 

 

Skrypt reagowania na błędy 

w połączeniu z bazą danych

<?php 
//Próba nawiązania połączenia z serwerem PostgreSQL
if (!@pg_connect(‘host=localhost dbname=moja_baza 
user=testowy’)) {

//Nawiązanie połączenia nie udało się

    exit(‘Nie można nawiązać połączenia z Bazą danych 
PostgreSQL’);
}

//Nawiązanie połączenia z serwerem PostgreSQL 

udane
    echo(‘Nawiązano połączenie z bazą danych 
PostgreSQL’);
pg_close( );
?>

background image

 

 

Przesyłanie zapytań 

do bazy danych

• Gdy skrypt uzyska połączenie z bazą danych, można 

rozpocząć komunikację z serwerem za pomocą języka SQL. 

• W PHP5 do wykonania zapytań do bazy danych 

PostgreSQL służy funkcja pg_query( ).

<php?

resource pg_query( resource identyfikator , string treść_zapytania;

?>

• Funkcja pg_query( ) wysyła zapytanie SQL podane jako 

argument treść_zapytania do serwera PostgreSQL, z 

którym połączenie identyfikowane jest poprzez argument 

identyfikator.

• Wynikiem wykonania funkcji jest obiekt typu resource, 

który stanowi identyfikator obiektu zawierającego wynik 

zapytania, lub wartość TRUE. Jeżeli treść zapytania jest 

niepoprawna, funkcja zwróci wartość FALSE oraz 

wygeneruje błąd klasy E_WARNING.

background image

 

 

Poznanie przyczyny błędu

• O tym jaka jest przyczyna błędu możemy się 

dowiedzieć przez wywołanie funkcji pg_last_error( ).

<?php

string pg_last_error( resource identyfikator_połączenia); 

?>

• Funkcja zwraca treść ostatniego błędu, w połączeniu 

identyfikowanym przez identyfikator_połączenia.

• Przykład wykorzystania omawianych funkcji:

<?php

//Próba nawiązania połączenia z serwerem PostgreSQL

if (!$identyfikator = @pg_connect( ‘host=localhost dbname= 

moja_baza user=testowy’))

exit(‘Nie można nawiązać połączenia z serwerem PostgreSQL’);

if (!$wynik=@pg_query($identyfikator, ‘SELECT * FROM Table’))

echo( ‘Wystąpił błąd w zapytaniu SQL; 

’.pg_last_error($identyfikator). ‘<br/>);

pg_close($identyfikator);

?>

background image

 

 

Pobieranie informacji z bazy 

danych

• Podana definicja funkcji pg_query( ) pokazuje, że funkcja może 

zwrócić obiekt typu resource. Dzieje się tak, gdy wynikiem zapytania 

SQL (np. typu SELECT) będzie zbiór rekordów, które zwróci serwer 

PostgreSQL.

• Obiekt typu resource zwrócony przez funkcję pg_query( ) nie pozwala 

w bezpośredni sposób uzyskać dostępu do danych zwróconych przez 

serwer. Skrypt PHP5 musi w tym celu skorzystać z jednej z funkcji 

grupy pg_feach_.

• Są to funkcje:

– pg_feach_row( ), zwraca rekord danych w postaci zwykłej tablicy,
– pg_feach_assoc( ), zwraca rekord danych w postaci tablicy 

asocjacyjnej,

– pg_feach_array( ), zwraca rekord danych w postaci tablicy 

asocjacyjnej lub zwykłej, w zależności od wartości jednego 

parametru,

– pg_feach_object( ), zwraca rekord danych w postaci obiektu 

zawierajćego właściwości, których nazwy odpowiadają polom 

rekordu.

background image

 

 

Szablon skryptu wyświetlania 

informacji pobranej z bazy 

danych

<?php

//Funkcja wykonująca zapytania SQL i zwraca wynik

function queryFunc($queryString) {

   if (!$result = @pg_query( $queryString))

     exit( ‘Wystąpił błąd w zapytaniu <b>’ . $queryString. ‘</b>: ‘ 

.pg_last_error( ). 

        ‘<br/>’);

//Zwrócenie wyników zapytania

     return $result;

}

//Funkcja nawiązania połączenia z bazą danych moja_baza na 

serwerze PostgreSQL

if ( !$identyfikator=@pg_connect( ‘host=localhost 

dbname=moja_baza                    

user=testowy’))

     exit(‘Nie można nawiązać połączenia z serwerem PostgreSQL’);

//Wysłanie zapytania SQL i odebranie wyników

$wyniksql = queryFunc( ‘SELECT * FROM Osoba’);

//Tutaj jest miejsce kodu wyświetlania wyniku

//Zamknięcie połączenia z bazą danych

pg_close( );

?>

background image

 

 

Funkcja pg_fetch_row( )

• Składnia funkcji pg_feach_row( ):

<?php

array pg_feach_row( resource wynik_zapytania_sql 

       [, int numer_wiersza]);

?>

• Funkcja zwraca w postaci tablicy zwykłej wiersz (rekord) 

danych zawartych w wyniku zapytania SQL zwróconego 

przez funkcję pg_query i reprezentowanego przez 

argument wynik_zapytania _sql lub zwraca wartość 

FALSE, jeśli niema kolejnego rekordu.

• Jeżeli podany zostanie opcjonalny argument 

numer_wiersza, to funkcja zwróci dane ze wskazanego 

wiersza. W innym przypadku zwróci dane z wiersza, na 

który wskazuje wewnętrzny numer pozycji, następnie 

przesunie wskaźnik na następną pozycję. Przy pierwszy 

wywołaniu funkcji wewnętrzny wskaźnik znajduje się na 

pierwszej pozycji.

• Każde wywołąnie funkcji pg_feach_row( ) powoduje 

zwrócenie zawartości jednego rekordu danych zawartego 

w wyniku zapytania

background image

 

 

Przykład wyświetlenia 

wyniku

<?php
…..
echo( ‘<table border=”0”>’
echo( ‘<tr><td colspan=”2”><b>Wyniki></b></td></tr>’);
while ($row=pg_feach_row($wyniksql)) {

echo(‘<tr><td align=”right”>Imię; </td><td>’ .$row[1]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Nazwisko; </td><td>’ .$row[2]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Płeć; </td><td>’ .$row[3]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Data urodz; </td><td>’ .$row[4]. ‘</td></tr>’);
echo(‘<tr><td  colspan=”2”>&nbsp;</td></tr>’);

}
echo( ‘</table>’);
?>

background image

 

 

Funkcja pg_fetch_assoc( )

• Składnia funkcji pg_feach_assoc( ):

<?php
array pg_feach_assoc( resource wynik_zapytania_sql 
       [, int numer_wiersza]);
?>

• Działanie funkcji pg_feach_ assoc( ) jest podobne do 

działania funkcji pg_feach_row( ), z tym że zwracana tablica 
jest tablicą asocjacyjną. Nazwy poszczególnych elementów 
tablicy odpowiadają nazwom pól zawartym w rekordach.

• Funkcja zwraca tablicę asocjacyjną zawierającą rekord 

danych lub wartość FALSE, jeżeli niema kolejnego rekordu. 
Liczba elementów tablicy odpowiada liczbie pól w rekordzie.

• Jeśli podamy opcjonalny argument numer_wiersza, funkcja 

pg_feach_assoc( ) zwróci pole wybranego wiersza.

background image

 

 

Przykład wyświetlenia 

wyniku

<?php
…..
echo( ‘<table border=”0”>’
echo( ‘<tr><td colspan=”2”><b>Wyniki></b></td></tr>’);
while ($row=pg_feach_assoc($wyniksql)) {

echo(‘<tr><td align=”right”>Imię; </td><td>’ .$row[1]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Nazwisko; </td><td>’ .$row[2]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Płeć; </td><td>’ .$row[3]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Data urodz; </td><td>’ .$row[4]. ‘</td></tr>’);
echo(‘<tr><td  colspan=”2”>&nbsp;</td></tr>’);

}
echo( ‘</table>’);
?>

background image

 

 

Funkcja pg_fetch_array( )

• Składnia funkcji pg_feach_array( ):

<?php
array pg_feach_array( resource wynik_zapytania_sql 
       [, int numer_wiersza. [. int typ_wyniku]]);
?>

• Funkcja jest połączeniem funkcji pg_feach_row( ) 

oraz funkcji pg_feach_assoc( ) i pozwala na 
zwrócenie rekordu jedno-cześnie w postaci tablicy 
numerycznej i asocjacyjnej, chyba że zdecydujemy 
inaczej.

• To, jakiego rodzaju tablica zostanie zwrócona przez 

funkcję, zależy od wartości argumentu typ_wyniku:

– PQSQL_NUM - zwraca tablicę numeryczną
– PGSQL_ASSOC – zwraca tablicę asocjacyjną
– PGSQL_BOTH – zwraca dwie tablice numeryczną i 

asocjacyjną

background image

 

 

Przykład wyświetlenia 

wyniku

<?php
…..
echo( ‘<table border=”0”>’
echo( ‘<tr><td colspan=”2”><b>Wyniki></b></td></tr>’);
while ($row=pg_feach_array($wyniksql, NUL , PGSQL_BOTH)) {

echo(‘<tr><td align=”right”>Imię; </td><td>’ .$row[1]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Nazwisko; </td><td>’ .$row[2]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Płeć; </td><td>’ .$row[3]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Data urodz; </td><td>’ .$row[4]. ‘</td></tr>’);
echo(‘<tr><td  colspan=”2”>&nbsp;</td></tr>’);

}
echo( ‘</table>’);
?>

background image

 

 

Funkcja pg_fetch_object( )

• Składnia funkcji pg_feach_object( ):

<?php
object pg_feach_object( resource wynik_zapytania_sql 
       [, int numer_wiersza]);
?>

• Funkcja zwraca obiekt, którego właściwości (typu 

public) odpowiadają polom rekordu danych. Jeżeli 
w wyniku zapytania SQL zwróconym przez 
funkcję pg_query( ) niema więcej rekordów, 
funkcja pg_fetch_object( ) zwraca wartość 
FALSE.

• Nazwy właściwości obiektu zwracanego – 

odpowiadają nazwom pól rekordu danych.

background image

 

 

Przykład wyświetlenia 

wyniku

<?php
…..
echo( ‘<table border=”0”>’
echo( ‘<tr><td colspan=”2”><b>Wyniki></b></td></tr>’);
while ($row=pg_feach_object($wyniksql)) {

echo(‘<tr><td align=”right”>Imię; </td><td>’ .$row[1]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Nazwisko; </td><td>’ .$row[2]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Płeć; </td><td>’ .$row[3]. ‘</td></tr>’);
echo(‘<tr><td align=”right”>Data urodz; </td><td>’ .$row[4]. ‘</td></tr>’);
echo(‘<tr><td  colspan=”2”>&nbsp;</td></tr>’);

}
echo( ‘</table>’);
?>

background image

 

 

Uzyskiwanie dodatkowych 

informacji o zwróconych 

danych

• Funkcja pg_num_row( ) – podaje liczbę rekordów 

zawartą w wyniku zwróconym przez funkcję 

pg_query( ).

• Funkcja pg_num_fields( ) – zwraca liczbę pól jaką 

zawierają zwrócone rekordy przez funkcję pg_query( ).

• Funkcja pg_field_name( ) – zwraca nazwę pola 

rekordu danych.

• Funkcja pg_field_type( ) – zwraca nazwę typu pola 

rekordu danych.

• Funkcja pg_field_prtlen( ) – zwraca aktualną długość 

pola (w znakach) rekordu danych.

• Funkcja pg_free_result( ) – niszczy obiekt typu 

resource.

• Funkcja pg_affected_rows( ) – zwraca liczbę wierszy, 

na których była wykonana operacja, jeżeli w zapytaniu 

SQL użyto poleceń: INSERT, UPDATE lub DELETE.


Document Outline