Forum und email
Firebird/InterBase

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 https://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 https://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

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

NazwaDomyślna wartośćMożliwość zmianRejestr zmian
ibase.allow_persistent"1"PHP_INI_SYSTEM 
ibase.max_persistent"-1"PHP_INI_SYSTEM 
ibase.max_links"-1"PHP_INI_SYSTEM 
ibase.default_dbNULLPHP_INI_SYSTEMDostępne od PHP 5.0.0.
ibase.default_userNULLPHP_INI_ALL 
ibase.default_passwordNULLPHP_INI_ALL 
ibase.default_charsetNULLPHP_INI_ALLDostę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.

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łaOpis
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_READRozpoczyna transakcję w trybie tylko do odczytu.
IBASE_WRITERozpoczyna transakcję w trybie odczytu i zapisu.
IBASE_CONSISTENCYRozpoczyna 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_CONCURRENCYRozpoczyna 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_COMMITTEDRozpoczyna 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_WAITOznacza, że transakcja powinna czekać i ponawiać próbę w momencie wystąpienia konfliktu.
IBASE_NOWAITOznacza, ż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łaOpis
IBASE_FETCH_BLOBSRó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_ARRAYSPowoduje 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_UNIXTIMEPowoduje ż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()

Spis treści
ibase_add_user --  Dodaje użytkownika do bazy danych bezpieczeństwa (tylko dla IB6 i późniejszych)
ibase_affected_rows --  Zwraca ilość wierszy przetworzonych przez ostatnie zapytanie
ibase_backup --  Uruchamia zadanie wykonania kopii zapasowej w Menedżerze Usługi i natychmiast powraca
ibase_blob_add --  Dodaje dane do nowo utworzonego BLOBa
ibase_blob_cancel --  Odwołuje tworzenie BLOBa
ibase_blob_close --  Zamyka BLOBa
ibase_blob_create --  Tworzy nowego BLOBa w celu umieszczenia w nim danych
ibase_blob_echo --  Wysyła zawartość BLOBa do przeglądarki
ibase_blob_get --  Pobiera X bajtów danych z otwartego BLOBa
ibase_blob_import --  Tworzy BLOBa, kopiuje do niego zawartość pliku i zamyka go.
ibase_blob_info --  Zwraca długość i inne informacje na temat BLOBa
ibase_blob_open --  Otwiera BLOBa w celu pobrania części danych
ibase_close --  Zamyka połączenie z serwerem Firebird/InterBase
ibase_commit_ret -- Potwierdza transakcję bez zamykania jej
ibase_commit -- Potwierdza transakcję
ibase_connect --  Otwiera połączenie z serwerem Firebird/InterBase
ibase_db_info --  Pobiera szczegółowe informacje o bazie danych
ibase_delete_user --  Usuwa użytkownika z bazy danych bezpieczeństwa (tylko dla IB6 i późniejszych)
ibase_drop_db --  Usuwa bazę danych Firebird/InterBase
ibase_errcode --  Zwraca kod błędu
ibase_errmsg --  Zwraca tekst komunikatu błędu
ibase_execute -- Wykonuje wcześniej przygotowane zapytanie
ibase_fetch_assoc --  Pobiera wiersz wyniku zapytania w postaci tablicy asocjacyjnej
ibase_fetch_object -- Pobiera wiersz wyniku zapytania w postaci obiektu
ibase_fetch_row -- Pobiera wiersz wyniku zapytania w postaci tablicy numerycznej
ibase_field_info --  Pobiera informację o polu
ibase_free_event_handler --  Kasuje zarejestrowany identyfikator funkcji obsługi zdarzenia
ibase_free_query --  Zwalnia pamięć zajmowaną przez przygotowane zapytanie
ibase_free_result -- Zwalnia pamięć zajmowaną przez wynik
ibase_gen_id --  Zwiększa generator i zwraca jego nową wartość
ibase_maintain_db --  Uruchamia polecenie konserwacyjne na serwerze baz danych
ibase_modify_user --  Modyfikuje użytkownika w bazie danych bezpieczeństwa (tylko dla IB6 i późniejszych)
ibase_name_result --  Przypisuje nazwę do zbioru wynikowego
ibase_num_fields --  Zwraca ilość pól w zbiorze wynikowym
ibase_num_params --  Zwraca liczbę parametrów w przygotowanym zapytaniu
ibase_param_info --  Zwraca informację o parametrze w przygotowanym zapytaniu
ibase_pconnect --  Otwiera stałe połączenie z serwerem Firebird/InterBase
ibase_prepare --  Przygotowuje zapytanie do późniejszego dowiązania argumentów w postaci zmiennych i do wykonania
ibase_query -- Wykonuje zapytanie na serwerze Firebird/Interbase
ibase_restore --  Uruchamia zadanie przywrócenia bazy danych z kopii zapasowej w Menedżerze Usługi i natychmiast powraca
ibase_rollback_ret -- Wycofuje transakcję bez zamykania jej
ibase_rollback -- Wycofuje transakcję
ibase_server_info --  Pobiera informacje o serwerze baz danych
ibase_service_attach --  Łączy się do Menedżera Usługi
ibase_service_detach --  Odłącza się od Menedżera Usługi
ibase_set_event_handler --  Rejestruje funkcję zwrotną wywoływaną podczas występowania zadarzeń
ibase_timefmt --  Ustawia format znacznika czasu, daty i czasu w typach kolum zwracanych przez zapytania
ibase_trans -- Rozpoczyna transakcję
ibase_wait_event --  Czeka na zdarzenie przesłane przez bazę danych