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ą:
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 |
Oto krótkie wyjaśnienie dyrektyw konfiguracji.
ibase.allow_persistent
booleanOkreśla czy pozwolić bazie Firebird/InterBase na połączenia stałe.
ibase.max_persistent
integerDefiniuje 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
integerDefiniuje maksymalną liczbę połączeń Firebird/InterBase na proces serwera, włączając w to połączenia stałe.
ibase.default_db
stringDefiniuje 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
stringDefiniuje domyślną nazwę użytkownika, używaną podaczas połączenia do bazy danych, jeżeli nie jest podana jako parametr funkcji.
ibase.default_password
stringDefiniuje domyślne hasło, używane podaczas połączenia do bazy danych, jeżeli nie jest podane jako parametr funkcji.
ibase.default_charset
stringDefiniuje domyślne kodowanie znaków, używane podaczas połączenia do bazy danych jeżeli nie jest podane jako parametr funkcji.
ibase.timestampformat
stringibase.dateformat
stringibase.timeformat
stringTe 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ł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()
- 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