PHP PostgreSQL

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


Wyszukiwarka

Podobne podstrony:
PHP podst progr suplement wyklad grudzien 2011
cw php
Jak wysłać ze strony WWW e-mail z dowolnym załącznikiem, PHP Skrypty
Jak przerwać wykonywanie pętli (for, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty
Jak wygenerować bezpieczne, PHP Skrypty

więcej podobnych podstron