Podręcznik PHP
Poprzedni |  | Następny

# XLII. Firebird/InterBase

# Wstęp

Firebird/InterBase jest relacyjną bazą danych oferującą wiele cech ANSI SQL-92, działającą na systemach Linux, Windows i różnorodnych platformach Unixowych. Firebird/InterBase oferuje doskonałą współbieżność, dużą wydajność i potężne wsparcie języka dla procedur składowanych i wyzwalaczy. Baza jest używana w systemach produkcyjnych, pod różnymi nazwami od 1981 r.

InterBase to nazwa jednego z wariantów tej bazy z zamkniętym kodem źródłowym, rozwijana przez Borland/Inprise. Więcej informacji na temat InterBase jest dostępnych na stronie http://www.borland.com/interbase/.

Firebird jest komercyjnie niezależnym projektem programistów C i C++, doradców technicznych i zwolenników rozwiajania i ulepszania wieloplatformowego systemu zarządzania bazami danych bazującego na kodzie źródłowym wydanym przez Inprise Corp (znanej jako Borland Software Corp) na licencji InterBase Public License v.1.0 z dnia 25 lipca 2000 r. Więcej informacji na temat Firebird jest dostępnych na stronie http://www.firebirdsql.org/.

> Notatka: To rozszerzenie działa z InterBase 5 i późniejszymi wersjami oraz ze wszystkimi wersjami Firebird. Wsparcie dla InterBase 5.x będzie zakończone w PHP 5.

> Jako znaku unikowego ta baza danych używa pojedyńczego cudzysłowu ('), ( to zachowanie jest podobne do bazy danych Sybase ) i może zostać ustawione w `php.ini` przez następującą dyrektywę konfiguracyjną:

> `magic_quotes_sybase = On`

# Wymagania

# Instalacja

W celu uruchomienia wsparcia dla Firebird/InterBase, należy użyć opcji `--with-interbase[=DIR]` w czasie kompilacji PHP, gdzie DIR jest katalogiem instalacji InterBase - domyślnie `/usr/interbase`.

> Informacja dla użytkowników Windows: Aby aktywować to rozszerzenie w środowisku Windows, musisz skopiować `fbclient.dll/gds32.dll` z katalogu z bibliotekami PHP/Win32 do katalogu SYSTEM32 systemu Windows (np. `C:\WINNT\SYSTEM32` lub `C:\WINDOWS\SYSTEM32`). W przypadku gdy serwer Firebird/InterBase jest zainstalowany na tej samej maszynie gdzie uruchomiony jest PHP, biblioteka powinna już tam się znajdować. Zatem w tym przypadku nie ma potrzeby kopiowania `fbclient.dll/gds32.dll` z katalogu bibliotek.

# Konfiguracja uruchomieniowa

Na działanie tych funcji wpływają ustawienia zawarte w pliku `php.ini`.

Tabela 1. Opcje konfiguracji Firebird/InterBase

Nazwa | Domyślna wartość | Możliwość zmian | Rejestr zmian
--- | --- | --- | ---
ibase.allow_persistent | "1" | PHP_INI_SYSTEM |
ibase.max_persistent | "-1" | PHP_INI_SYSTEM |
ibase.max_links | "-1" | PHP_INI_SYSTEM |
ibase.default_db | NULL | PHP_INI_SYSTEM | Dostępne od PHP 5.0.0.
ibase.default_user | NULL | PHP_INI_ALL |
ibase.default_password | NULL | PHP_INI_ALL |
ibase.default_charset | NULL | PHP_INI_ALL | Dostępne od PHP 5.0.0.
ibase.timestampformat | "%Y-%m-%d %H:%M:%S" | PHP_INI_ALL |
ibase.dateformat | "%Y-%m-%d" | PHP_INI_ALL |
ibase.timeformat | "%H:%M:%S" | PHP_INI_ALL |

Szczegóły i definicje dotyczące stałych PHP_INI_* znajdują się w rozdziale Dodatek G.

Oto krótkie wyjaśnienie dyrektyw konfiguracji.

`ibase.allow_persistent` boolean

  Określa czy pozwolić bazie Firebird/InterBase na połączenia stałe.

`ibase.max_persistent` integer

  Definiuje maksymalną liczbę połączeń stałych Firebird/InterBase na proces serwera. Jeżeli ta liczba zostanie przekroczona to nowe połączenia utworzone za pomocą ibase_pconnect() będą istniały tylko podczas działania skryptu.

`ibase.max_links` integer

  Definiuje maksymalną liczbę połączeń Firebird/InterBase na proces serwera, włączając w to połączenia stałe.

`ibase.default_db` string

  Definiuje domyślną bazę danych dla ibase_[p]connect() i jest używana w przypadku, kiedy funkcja zostanie wywołana bez parametru. Jeżeli dodatkowo jest włączony tryb SQL safe mode, nie będą możliwe połączenia do innych baz danych, poza tą domyślną.

`ibase.default_user` string

  Definiuje domyślną nazwę użytkownika, używaną podaczas połączenia do bazy danych, jeżeli nie jest podana jako parametr funkcji.

`ibase.default_password` string

  Definiuje domyślne hasło, używane podaczas połączenia do bazy danych, jeżeli nie jest podane jako parametr funkcji.

`ibase.default_charset` string

  Definiuje domyślne kodowanie znaków, używane podaczas połączenia do bazy danych jeżeli nie jest podane jako parametr funkcji.

`ibase.timestampformat` string

`ibase.dateformat` string

`ibase.timeformat` string

  Te dyrektywy ustawiają formatowanie daty i czasu, które jest używane podczas zwracania wartości dat i czasów ze zbioru wynikowego lub podczas dowiązywania argumentów.

# Typy zasobów

# Stałe predefiniowane

Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.

Następujące stałe mogą być przekazane do ibase_trans() w celu określenia zachowania transakcji.

Tabela 2. Flagi transakcji Firebird/InterBase

Stała | Opis
--- | ---
IBASE_DEFAULT | Standardowe ustawienia transakcji. Domyślnie są one określone przez bibliotekę klienta, w większości przypadków następująco: IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT .
IBASE_READ | Rozpoczyna transakcję w trybie tylko do odczytu.
IBASE_WRITE | Rozpoczyna transakcję w trybie odczytu i zapisu.
IBASE_CONSISTENCY | Rozpoczyna transakcję na poziomie izolacji ustawionym jako 'spójny', który oznacza że transakcja nie może czytać z tabel będących w trakcie modyfikacji przez równoległe transakcje.
IBASE_CONCURRENCY | Rozpoczyna transakcję na poziomie izolacji ustawionym jako 'współbieżny' (lub 'migawka'), który oznacza że transakcja ma dostęp do wszystkich tabel, ale nie widzi żadnych zmian zatwierdzonych w międzyczasie przez równoległe transakcje.

IBASE_COMMITTED

Rozpoczyna transakcję na poziomie izolacji ustawionym jako 'odczyt zatwierdzony'. Ta flaga powinna być połączona jedną z dwóch: `IBASE_REC_VERSION` lub `IBASE_REC_NO_VERSION`. Ten poziom izolacji pozwala uzyskać dostęp do zmian zatwierdzonych w międzyczasie przez inne transakcje. W połączeniu z `IBASE_REC_NO_VERSION` może być odczytana tylko ostatnia wartość wiersza. W połączeniu z `IBASE_REC_VERSION` może być zawsze odczytana aktualna wartość wiersza po zmodyfikowaniu jej przez równoległe transakcję.

IBASE_WAIT | Oznacza, że transakcja powinna czekać i ponawiać próbę w momencie wystąpienia konfliktu.
IBASE_NOWAIT | Oznacza, że transakcja powinna natychmiast zwrócić błąd w momencie wystąpienia konfliktu.

Następujące stałe mogą być przekazane do ibase_fetch_row(), ibase_fetch_assoc() lub ibase_fetch_object() w celu określenia zachowania tych funkcji podczas pobierania wierszy.

Tabela 3. Flagi pobierania wierszy Firebird/InterBase

Stała | Opis
--- | ---
IBASE_FETCH_BLOBS | Równoważna z `IBASE_TEXT` w celu zachowania zgodności z poprzednimi wersjami. Powoduje pobranie zawartości BLOBa, zamiast zwrócenia identyfikatora BLOBa.
IBASE_FETCH_ARRAYS | Powoduje pobieranie tablic. W przeciwnym wypadku są zwracane identyfikatory tablic. Identyfikatory tablic mogą być używane tylko jako argumenty dla operacji INSERT, gdyż obecnie nie ma odpowiednich funkcji do ich obsługiwania.
IBASE_UNIXTIME | Powoduje że pola data i czas nie są zwracane w postaci sformatowanych łańcuchów, lecz jako unixowy znacznik czasu (liczba sekund, która upłynęła od początku epoki Uniksa, datowanej na 1 stycznia 1970 0:00 GTM). W niektórych systemach może to stanowić problem, w momencie gdy zostaną użyte daty sprzed 1970 r.

Następujące stałe przekazują żądania i opcje do funkcji usługi API (ibase_server_info(), ibase_db_info(), ibase_backup(), ibase_restore() i ibase_maintain_db()). Prosimy odnieść się do dokumentacji Firebird/InterBase żeby zapoznać się ze znaczeniem tych opcji.

`IBASE_BKP_IGNORE_CHECKSUMS`

`IBASE_BKP_IGNORE_LIMBO`

`IBASE_BKP_METADATA_ONLY`

`IBASE_BKP_NO_GARBAGE_COLLECT`

`IBASE_BKP_OLD_DESCRIPTIONS`

`IBASE_BKP_NON_TRANSPORTABLE`

`IBASE_BKP_CONVERT`

  Opcje dla ibase_backup()

`IBASE_RES_DEACTIVATE_IDX`

`IBASE_RES_NO_SHADOW`

`IBASE_RES_NO_VALIDITY`

`IBASE_RES_ONE_AT_A_TIME`

`IBASE_RES_REPLACE`

`IBASE_RES_CREATE`

`IBASE_RES_USE_ALL_SPACE`

  Opcje dla ibase_restore()

`IBASE_PRP_PAGE_BUFFERS`

`IBASE_PRP_SWEEP_INTERVAL`

`IBASE_PRP_SHUTDOWN_DB`

`IBASE_PRP_DENY_NEW_TRANSACTIONS`

`IBASE_PRP_DENY_NEW_ATTACHMENTS`

`IBASE_PRP_RESERVE_SPACE`

`IBASE_PRP_RES_USE_FULL`

`IBASE_PRP_RES`

`IBASE_PRP_WRITE_MODE`

`IBASE_PRP_WM_ASYNC`

`IBASE_PRP_WM_SYNC`

`IBASE_PRP_ACCESS_MODE`

`IBASE_PRP_AM_READONLY`

`IBASE_PRP_AM_READWRITE`

`IBASE_PRP_SET_SQL_DIALECT`

`IBASE_PRP_ACTIVATE`

`IBASE_PRP_DB_ONLINE`

`IBASE_RPR_CHECK_DB`

`IBASE_RPR_IGNORE_CHECKSUM`

`IBASE_RPR_KILL_SHADOWS`

`IBASE_RPR_MEND_DB`

`IBASE_RPR_VALIDATE_DB`

`IBASE_RPR_FULL`

`IBASE_RPR_SWEEP_DB`

  Opcje dla ibase_maintain_db()

`IBASE_STS_DATA_PAGES`

`IBASE_STS_DB_LOG`

`IBASE_STS_HDR_PAGES`

`IBASE_STS_IDX_PAGES`

`IBASE_STS_SYS_RELATIONS`

  Opcje dla ibase_db_info()

`IBASE_SVC_SERVER_VERSION`

`IBASE_SVC_IMPLEMENTATION`

`IBASE_SVC_GET_ENV`

`IBASE_SVC_GET_ENV_LOCK`

`IBASE_SVC_GET_ENV_MSG`

`IBASE_SVC_USER_DBPATH`

`IBASE_SVC_SVR_DB_INFO`

`IBASE_SVC_GET_USERS`

  Opcje dla ibase_server_info()

Poprzedni | Spis treści | Następny
filter_var | Początek rozdziału | ibase_add_user