Nauka programowania php

Prosty kurs dla amatorów

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 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

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


Newsy:

Nowości z listy dyskusyjnej

drugsxxx: Test (C/C++)
Mam taki test i co prawa ju¿ go pisa³em ale nie wiem jakie s± dobre odpowiedzi moze kto¶ mi pomo¿e??

http://www.kolejland.rail.pl/iz/Forum%20-%...wania/jipp2.jpg

Moje odpowiedzi to:

1. a
2. abc
3. bc
4. d
5. ad
morphix: Programik do wywietlania informacji na pulpicie (Windows Programming)
Plisss bardzo potrzebny nam jest taki program!!!
fressbie: [C++, Assembler] Zlece napisanie lub modyfikacje (Oferuj prac)
Witam,

Jak w temacie zlecê napisanie od nowa lub zmodyfikowanie istniej±cej ju¿ wersji programu do obliczania sum md5. Zainteresowanych proszê o kontakt.
bear007: Polska strona rozwaa przejcie na Open Source (Server-Side)
Autor strony Polishwords rozwa¿a przej¶cie na model Open Source. Aby u³atwiæ sobie decyzjê umie¶ci³ ankietê, w której mo¿na zag³osowaæ za albo przeciwko przej¶ciu na Open Source. Pomó¿my autorowi!

Strona Polishwords jest przeznaczona dla programistów i ogó³ informatyków. Zawiera filmy instrukta¿owe z programowania i zarz±dzania baz± danych. Autor rozwa¿a obecnie przej¶cie na model Open Source i opublikowanie kodu strony. Chcia³by przez to osi±gn±æ szybszy rozwój strony i zaanga¿owanie wiêkszej liczby programistów PHP.

W umieszczonej ankiecie mo¿na zag³osowaæ czy autor powinien przej¶æ na model Open Source. Pomó¿ podj±æ dobr± decyzjê autorowi.

Wiêcej na: http://polishwords.com.pl/blog/2008/polishwords-open-source/
webcoder: Program typu klient-serwer (Delphi/Pascal)
Witam pisze program klient-serwer. Próba nr.1:
Skorzysta³em z najprostszech komponentów tego rodzaju czyli ClientSocket i ServerSocket. Posutawialem porty oraz ip w kliencie.
Je¿eli wpsize ip localhosta (127.0.0.1) to klient polaczy sie z serwerem. Jezeli wpisze IP wewnetrzne tez sie polaczy. Ale jezeli wpisze juz ip zewnetrzne to wyskauje blad asynohrous socket error 10061.
Podejscie nr.2
Zmieni³em komponenty na Indy. Wszystko zosta³o odpowiednio skofigurowane. Wiec sytuacja jest identyczna jak powyzej wszystko dziala na ip wewnetrznym i na localhoscie a na zewnetrznym juz. Prosze o pomoc w tej sprawie.

Mo¿e jeszcze dodam, ¿e jest w sieci typu WLan.
Pozdro
Prosze o jak najszybsza odpowiedz

Jak nie znasz jezyka C++ i wskaznikow i programowania obiektowego, to sobie daruj programy okienkowe. Jezeli znasz to wszystko co wymienilem, to w sumie powinienes tez wiedziec jak, badz przy pomocy czego da sie tworzyc programy okienkowe piszac w C++

Kurs

Kurs powstał w celu nauki podstawowych zagadnień z dziedziny php.


Losowe tagi:

apc
enchant
fileinfo
fribidi
info