Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski



Podobne dokumenty
GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

InsERT GT Własne COM 1.0

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

PERSON Kraków

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Zarządzanie Zasobami by CTI. Instrukcja

Instrukcja programu PControl Powiadowmienia.

G PROGRAMMING. Part #4

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

Zmiany w wersji 1.18 programu VinCent Office.

VinCent Office. Moduł Drukarki Fiskalnej

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Ładowanie i reorganizacja

Instrukcja obsługi platformy zakupowej PHU VECTOR SP. Z O.O.

Warunki Oferty PrOmOcyjnej usługi z ulgą

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Automatyzacja procesu publikowania w bibliotece cyfrowej

Kancelaris - Zmiany w wersji 2.50

Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?

PROCEDURA ADMINISTROWANIA ORAZ USUWANIA

Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy

Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia:

PL/SQL. Zaawansowane tematy PL/SQL

Projektowanie bazy danych

System do kontroli i analizy wydawanych posiłków

Charakterystyka systemów plików

Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Automatyczne generowanie transakcji do WB 1.0 dodatek do Finanse i Ksi gowo ERP dla 1 firmy

PRESTASHOP INTEGRATOR XL BY CTI INSTRUKCJA

Praca na wielu bazach danych część 2. (Wersja 8.1)

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

Zainstalowana po raz pierwszy aplikacja wymaga aktualizacji bazy danych obsługiwanych sterowników.

API transakcyjne BitMarket.pl

Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia:

Microsoft Management Console

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Instrukcja postępowania w celu podłączenia do PLI CBD z uwzględnieniem modernizacji systemu w ramach projektu PLI CBD2

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

Logowanie do systemu Faktura elektroniczna

System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Miejskim w Gdańsku

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

OptiMore Importer Rejestru VAT. Instrukcja obsługi programu

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

INSTRUKCJA OBSŁUGI URZĄDZENIA: HC8201

Integracja systemów, integracja procesów

Konfiguracja historii plików

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych

SpedCust 5 instrukcja instalacji

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

Projektowanie Systemów Inf.

Śrubka zamykająca Uchwyt ścienny Przycisk kontrolny Lampka kontrolna

Harmonogramowanie projektów Zarządzanie czasem

TESTER LX 9024 (SYSTEM ALARMOWY IMPULSOWY) INSTRUKCJA OBSŁUGI

Opis instalacji systemu Intranet Komunikator

Chemoinformatyczne bazy danych - Wprowadzenie do technologii baz danych. Andrzej Bąk

Skrócony podręcznik obsługi dla programu Wizualna poczta głosowa w wersji 8.5 lub nowszej

Procedury uzyskania dostępu do systemu SIL

KLAUZULE ARBITRAŻOWE

DANE UCZESTNIKÓW PROJEKTÓW (PRACOWNIKÓW INSTYTUCJI), KTÓRZY OTRZYMUJĄ WSPARCIE W RAMACH EFS

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Specyfikacja warunków zamówienia

Zdalne odnawianie certyfikatów do SWI

SIECI KOMPUTEROWE I BAZY DANYCH

INSTRUKCJA WebPTB 1.0

Przewodnik AirPrint. Ten dokument obowiązuje dla modeli atramentowych. Wersja A POL

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego

Poniżej instrukcja użytkowania platformy

WYKAZ ZMIAN W INSTRUKCJI UśYTKOWNIKA KSI

Adapter USB do CB32. MDH-SYSTEM ul. Bajkowa 5, Lublin tel./fax lub kom e mail: info@mdh-system.pl

Co do zasady, obliczenie wykazywanej

NOWELIZACJA USTAWY PRAWO O STOWARZYSZENIACH

Wykład 4. W tym wykładzie omówimy deklaratywne więzy spójności stanowiące jeden z elementów aplikacji bazy danych po stronie serwera.

OGŁOSZENIE O ZAMÓWIENIU- DOSTAWY

REGULAMIN PROMOCJI MIX LAN 2PAK. 1 Postanowienia ogólne

Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia:

Wykład 8 Ochrona danych wprowadzenie Sterowanie dostępem do danych Sterowanie przepływem danych Ograniczanie możliwości wnioskowania Szyfrowanie

Instrukcja wgrywania synoptyki pola (wersja modelu danych do 634)

Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ).

Procedura nadawania uprawnień do potwierdzania, przedłuŝania waŝności i uniewaŝniania profili zaufanych epuap. Załącznik nr 1

Procedura nadawania uprawnień do potwierdzania Profili Zaufanych w Urzędzie Gminy w Ryjewie

Baza danych. Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami.

INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI

Struktura plików wejściowych kontrahenci krajowi i zagraniczni ipko biznes

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Budowa systemów komputerowych

Ćwiczenia graficzne.

Sieci komputerowe cel

CitiDirect EB - Mobile

Bazy Danych. Laboratorium 2

Materiały szkoleniowe dla partnerów. Prezentacja: FIBARO a system grzewczy.

2 Zarządzenie wchodzi w życie z dniem podpisania.

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

Transkrypt:

Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski

Wykład 11 Zastosowanie PHP do programowania aplikacji baz danych Oracle

Wsparcie programowania w PHP baz danych Oracle Oprócz możliwego dostępu do baz danych Oracle poprzez ODBC istnieją specjalne, bardziej optymalne rozszerzenia PHP, w znacznym stopniu wspomagające programowanie baz danych Oracle oparte na specyficznych sterownikach tej bazy danych. Najlepszym rozwiązaniem jest jednak korzystanie z odpowiedniego sterownika OCI (Oracle Call-Interface) dla danej wersji serwera Oracle. Podstawową zaletą PHP jest możliwość rozszerzenia go o obsługę OCI8 (Oracle8 Call-Interface). Funkcje rozszerzenia php_oci8 generalnie pozwalają na dostęp do serwera Oracle 7 i Oracle 8, jednak w systemie operacyjnym Windows konieczny jest Oracle 8.1, aby używać biblioteki php_oci8.dll.

Wsparcie programowania w PHP baz danych Oracle Spośród możliwości php_oci8 należy wyróżnić: wiązanie globalnych i lokalnych zmiennych PHP z kolumnami tabel lub zmiennymi wiązanymi Oracle a, pełną obsługę abstrakcyjnych typów danych Oracle a: dużych obiektów (LOB), plików (FILE) i unikalnych numerów wierszy (ROWID). Gdy wersja serwera Oracle, dla którego chcemy napisać aplikację, nie jest odpowiednia do stosowania rozszerzenia php_oci8, PHP oferuje jeszcze inne rozszerzenie php_oracle. Rozszerzenie php_oracle (pod Windows jest to biblioteka php_oracle.dll) stanowi standardowe wsparcie dostępu do serwerów Oracle z poziomu aplikacji PHP, ale ma mniej możliwości niż to oparte na sterowniku OCI8.

Typowy schemat korzystania z bazy danych przez aplikację Połączenie z bazą danych Tworzenie zapytania / polecenia Interpretowanie (parsowanie) zapytania / polecenia Wykonanie zapytania / polecenia Ewentualne wykorzystanie wyników zapytania / polecenia (np. pobranie i wyświetlenie wyników zapytania) Zwolnienie pamięci zajmowanej przez zapytanie / polecenie Zamknięcie połączenia z bazą danych

Połączenie z bazą danych może być realizowane przez funkcje: ocilogon(string użytkownik, string hasło, string sid) tworzy (zwykłe) połączenie z bazą Oracle ocinlogon(string użytkownik, string hasło, string sid) tworzy następne (zwykłe) połączenie z bazą Oracle ociplogon(string użytkownik, string hasło, string sid) tworzy trwałe (persistent) połączenie z bazą Oracle Identyfikator instancji bazy danych Oracle sid jest argumentem opcjonalnym i jeżeli nie zostanie podany, to nastąpi próba połączenia z bazą danych Oracle na podstawie wartości zmiennej środowiskowej ORACLE_SID.

Tworzenie zapytania / polecenia może być realizowane generalnie na dwa sposoby: bez parametrów (zmiennych związanych), np. $Query = SELECT * FROM emp ; z parametrami (zmiennymi związanymi), np. $Query = INSERT INTO dept (deptno,dname,loc) ; $Query.= VALUES (:nr_w,:nazwa_w,:lok_w) ; W tym przypadku konieczna jest interpretacja (parsowanie) zapytania / polecenia połączona z powiązaniem zmiennych wiązanych Oracle a z odpowiednimi zmiennymi PHP przy pomocy funkcji ocibindbyname.

Interpretowanie (parsowanie) zapytania / polecenia jest realizowane przez funkcję: ociparse(resource połączenie,string zapytanie) Funkcja ociparse tworzy na podstawie zapytania instrukcję dla danego połączenia z bazą danych. Jeżeli instrukcja, przygotowana przez funkcję ociparse, posiada parametry (zmienne wiązane), to wymagają one powiązania ze zmiennymi PHP przez funkcję: ocibindbyname (resource instrukcja, string zmienna_związana_oracle a, odpowiednia_zmienna_php lub referencja_do_odpowiedniej _zmiennej_php, integer maksymalna_długość, integer typ)

Argument maksymalna_długość funkcji ocibindbyname, określający maksymalną długość wiązanych danych, posiada specjalne znaczenie w dwóch przypadkach: dla nieabstrakcyjnych typów danych, gdy przyjmuje wartość 1, to maksymalną długością jest długość powiązanej zmiennej PHP; dla abstrakcyjnych typów danych musi przyjmować wartość 1. Argument typ funkcji ocibindbyname jest opcjonalny: dla nieabstrakcyjnych typów danych, takich jak CHAR, VARCHAR2, NUMBER, DATE, nie podajemy go; dla abstrakcyjnych typów danych jego dozwolonymi wartościami są następujące predefiniowane stałe:

OCI_B_FILE plik binarny OCI_B_CFILE plik tekstowy OCI_B_BLOB binarny duży obiekt (LOB to akronim od Large OBject) OCI_B_CLOB tekstowy duży obiekt OCI_B_ROWID identyfikator wiersza (ROWID to akronim od ROW IDentifier) Należy pamiętać, że przed wiązaniem ze zmienną o abstrakcyjnym typie danych należy alokować pamięć dla deskryptorów i wskaźników tego typu zmiennych, używając funkcji: ocinewdescriptor(resource połączenie,integer typ) Argument typ jest opcjonalny i może przyjmować wartości: OCI_D_FILE, OCI_D_LOB, OCI_D_ROWID, przy czym domyślnie przyjmowany jest deskryptor pliku (OCI_D_FILE).

Wykonanie zapytania / polecenia jest realizowane przez funkcję: ociexecute(resource instrukcja, integer tryb) Argument tryb jest opcjonalny i może przyjmować predefiniowane wartości: OCI_COMMIT_ON_EXECUTE tryb domyślny, powodujący zatwierdzenie instrukcji po wykonaniu; OCI_DEFAULT powoduje, że transakcja instrukcji nie zostaje automatycznie zatwierdzona i może być jeszcze później wycofana, jeżeli dotyczy grupy poleceń DML (Data Manipulation Language) języka SQL.

Transakcję można wycofać, jeżeli dotyczy intrukcji SQL z grupy DML (insert,update,delete), przez funkcję ocirollback(resource połączenie) Funkcja próbuje wycofać wszystkie transakcje dla danego połączenia. Jeżeli więcej połączeń zostało utworzonych przez funkcje ocilogon lub ociplogon, to połączenia te mogą nie być odrębne. Wówczas wycofanie może dotyczyć instrukcji, których nie chcemy anulować. Aby uniknąć tego typu problemów, warto stosować do kolejnych połączeń z bazą danych funkcji ocinlogon. Transakcję można zatwierdzić, jeżeli tego wymaga (tzn. należy do grupy instrukcji DML), przez funkcję ocicommit(resource połączenie) która zatwierdza wszystkie transakcje dla połączenia.

Wykorzystanie wyników zapytania / polecenia może być zrealizowane na różne sposoby, które oparte są na kilku funkcjach pobierających wyniki zapytania i zapisujących je do wskazanych zmiennych PHP: ocidefinebyname(resource instrukcja, string kolumna, zmienna_php, integer typ) Funkcja ocidefinebyname musi być wywołana przed odpowiednią funkcją ociexecute(instrukcja) i dokonuje przyporządkowania zmiennej PHP lub odwołaniu do niej kolumny tabeli bazy danych, występującej w instrukcji zwracanej przez funkcję ociparse. Argument typ jest opcjonalny. Jest on wymagany i należy go używać w przypadku typów abstrakcyjnych. Dozwolone wartości typów abstrakcyjnych są takie same jak w przypadku. Funkcję ocidefinebyname stosuje się w połączeniu z funkcją ocifetch.

ocifetch(resource instrukcja) w połączeniu z funkcjami: ociresult(resource instrukcja, value kolumna) ocinumcols(resource instrukcja) Funkcja ocifetch przygotowuje (wydobywa) kolejny wiersz danych do odczytu za pomocą funkcji ociresult, która zwraca z bieżącego wiersza wynikowego instrukcji wartość kolumny danej przez jej nazwę lub numer. Kolumny są numerowane od 1, a funkcja ocinumcols umożliwia poznanie liczby kolumn w instrukcji. Gdy funkcja ocifetch nie znajduje już kolejnego wiersza, to zwraca wartość FALSE.

ocifetchinto(resource instrukcja, tablica_php lub odwołanie_do_tablicy_php, integer tryb) Funkcja pobiera kolejny wiersz danych z wykonanej instrukcji i umieszcza go w tablicy_php, która zostaje domyślnie poindeksowana liczbami całkowitymi, zaczynając od 1. Gdy funkcja ocifetchinto nie znajduje już wiersza, to zwraca wartość FALSE. Opcjonalny argument tryb steruje sposobem indeksowania tablicy. Dostępne są następujące predefiniowane stałe wartości trybu: OCI_ASSOC zwraca kolumny indeksowane nazwami, OCI_NUM zwraca kolumny indeksowane liczbami, OCI_RETURN_LOBS zwraca wartości dużych obiektów zamiast ich deskryptorów, OCI_RETURN_NULLS tworzy elementy dla kolumn pusty, które można łączyć operatorami logicznymi.

ocifetchstatement(resource instrukcja, tablica_php lub odwołanie_do_tablicy_php) Funkcja umieszcza tablicę danych z wyniku wykonania instrukcji w tablicy PHP, która zostaje poindeksowana nazwami kolumn. Każdy z elementów tej tablicy jest tablicą poindeksowaną liczbami całkowitymi, począwszy od zera. Odpowiadające sobie elementy tych podtablic stanowią wartości kolejnych kolumn (atrybutów) w danym wierszu (krotce) tabeli (relacji). Ponadto ocifetchstatement zwraca ilość pobranych wierszy w wyniku działania intrukcji. Gdy używamy funkcji ocifetchinto lub ocifetchstatement, przydatna jest też funkcja implode(string separator,array tablica), która przekształca tablicę w łańcuch, w którym kolejne elementy tablicy są rozdzielone separatorem.

Zwolnienie pamięci zajmowanej przez zapytanie / polecenie odbywa się przy pomocy funkcji ocifreestatement(resource instrukcja) Funkcja zwalnia pamięć związaną z instrukcją utworzoną przy pomocy funkcji ociparse. Jeżeli utworzono deskryptor dużego obiektu LOB przy pomocy funkcji ocinewdescriptor według schematu: $lob = ocinewdescriptor(połączenie, typ), to należy zwolnić zajmowaną przez niego pamięć, używając funkcji: ocifreedesc(object $lob)

Zamknięcie połączenia z bazą danych realizowane jest przez funkcję ocilogoff(resource połączenie) Funkcja ocilogoff zamyka połączenie z bazą danych. Obsługa błędów w operacjach na bazie danych Oracle jest wspierana przez funkcję ocierror(resource identyfikator), Funkcja w przypadku: wystąpienia błędu zwraca tablicę asocjacyjną, opisującą ostatni błąd wygenerowany przez bazę Oracle, która składa się z dwóch elementów o indeksach code i message, przechowujących odpowiednio kod błędu Oracle i opis tego błędu; braku błędu zwraca wartość FALSE. Argument identyfikator jest opcjonalny i pozwala wskazać zasób (instrukcję lub połączenie), dla którego chcemy uzyskać informację o błędzie.

Przykład zastosowania rozszerzenia PHP_OCI8 <?php // połączenie z bazą $Connection = ocilogon( scott, tiger ); // budownie zapytania $Query = SELECT EMPNO,ENAME,HIREDATE ; $Query.= FROM EMP ; $Query.= WHERE JOB = CLERK ; // interpretacja zapytania $Statement = ociparse($connection,$query); // skojarzenie trzech kolumn ze zmiennymi ocidefinebyname($statement, EMPNO,$EmployeeNo); ocidefinebyname($statement, ENAME,$EmployeeName); ocidefinebyname($statement, HIREDATE,$EmployeeHiredate); // wykonanie zapytania ociexecute($statement); // pobranie wszystkich wierszy wyniku zapytania while (ocifetch($statement)) { print( Pracownik o numerze $EmployeeNo i nazwisku $EmployeeName ); print( został zatrudniony $EmployeeHiredate.<br>\n ); } // zwolenienie polecenia ocifreestatement($statement); // zamknięcie połączenia ocilogoff($connection);?>