Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych

Podobne dokumenty
Dostęp do baz danych przy wykorzystaniu interfejsu PDO

Bazy danych w PHP. PHPMyAdmin

Podstawy programowania III WYKŁAD 2

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

PODSTAWY BAZ DANYCH 13. PL/SQL

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

PL/SQL. Zaawansowane tematy PL/SQL

Oracle PL/SQL. Paweł Rajba.

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Typy sterowników. Rozdział 21 JDBC. Podstawowe kroki aplikacji. Historia. Program napisany w języku Java JDBC API. Menadżer sterowników JDBC

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

PHP: bazy danych, SQL, AJAX i JSON

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Język PL/SQL. Rozdział 2. Kursory

Kurs WWW. Paweł Rajba.

DB+frontend Inne języki H2. Bazy Danych i Systemy informacyjne Wykład 9. Piotr Syga

15. Funkcje i procedury składowane PL/SQL

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Deklarowanie kursora

Paweł Rajba

JDBC (Java Database Connectivity vit )

Żeby korzystać z opisywanego modułu, należy go włączyć do kompilowanej wersji interpretatora PHP:

Język SQL. Rozdział 2. Proste zapytania

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Procedury i funkcje składowane

Ćwiczenia 2 IBM DB2 Data Studio

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

Baza numerów Wersja 1.1

Administracja i programowanie pod Microsoft SQL Server 2000

Relacyjne bazy danych a XML

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

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

Kurs WWW. Paweł Rajba.

Materiały do laboratorium MS ACCESS BASIC

Database Connectivity

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

P o d s t a w y j ę z y k a S Q L

Oracle PL/SQL. Paweł Rajba.

Plan wykładu Projekt fizyczny bazy danych Wprowadzenie PL/SQL PL/SQL Cechy PL/SQL

Oracle PL/SQL. Paweł Rajba.

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Wykład 5: PHP: praca z bazą danych MySQL

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Kursory. A. Pankowska 1

Tworzenie zapytań do Microsoft SQL Server

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Projektowani Systemów Inf.

Bazy danych wykład dwunasty PL/SQL, c.d. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Deklarowanie kursora. CURSOR nazwa [ ( param1 typ1 [,param2 typ2]... ) ] [RETURN typ zwracany] IS zapytanie SQL;

Dokumentacja techniczna API systemu SimPay.pl

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

1. ELEMENTY JĘZYKA PL/SQL

INFORMATOR TECHNICZNY WONDERWARE. Odczytywanie danych z arkusza Excel za pomocą zapytań SQL do aplikacji InTouch

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

Struktura bazy danych

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

1. Wyzwalacze BD (ang. triggers)

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

XML-owe bazy danych ćwiczenia 1

Podstawy i języki programowania

Wprowadzenie do języka SQL

Autor: Joanna Karwowska

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Dostęp do DBMS w Prologu za pomocą API ODBC

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Pakiety podprogramów Dynamiczny SQL

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład XI

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Język PL/SQL Procedury i funkcje składowane

Bloki anonimowe w PL/SQL

Plan wykładu BAZY DANYCH II WYKŁAD 4. Co to jest kursor? Rodzaje kursorów

Microsoft SQL Server Podstawy T-SQL

Język SQL, zajęcia nr 1

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Migracja do PostgreSQL za pomocą narzędzi Enterprise DB

BAZY DANYCH Cz III. Transakcje, Triggery

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Oracle Developer Suite. Budowa aplikacji użytkownika końcowego

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Wykład 8. SQL praca z tabelami 5

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Data modyfikacji:

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

Smarty PHP. Leksykon kieszonkowy

Oracle11g: Programowanie w PL/SQL

Transkrypt:

Wprowadzenie Rozdział 23 PDO Wprowadzanie do PDO, kursory zwykłe, kursory przewijane, obsługa błędów, przetwarzanie transakcyjne PDO PHP Data Objects, obiektowo-zorientowany interfejs programistyczny dostępu do SQL-owych baz danych z poziomu PHP, lekki: podstawowe API wydajny ponieważ zakodowany w C generyczny interfejs niezależny od źródła danych, zapewnia współpracę aplikacji z różnymi bazami danych: FreeTDS / Microsoft SQL Server / Sybase Firebird/Interbase 6 IBM DB2 IBM Informix Dynamic Server MySQL 3.x/4.x Oracle Call Interface ODBC v3 (IBM DB2, unixodbc and win32 ODBC) PostgreSQL SQLite 3 and SQLite 2 1 2 Podstawowe kroki aplikacji Źródło danych 1. dołączenie do źródła danych 2. określenie parametrów połączenia 3. przygotowanie i wykonanie polecenia 4. pobranie wyników 5. odłączenie od źródła danych (opcja) PDO-> construct() konstruktor klasy PDO ustanawia połączenia ze źródłem danych, źródło danych (DSN), nazwa użytkownika (opcja), hasło użytkownika (opcja), tablica z parametrami (opcja), wyjście: obiekt klasy PDO reprezentujący połączenie do bazy danych zamknięcie połączenia: utrata zakresu zmiennej reprezentującej połączenie, podstawienie pod zmienną wartości null //Ustanowienie połączenia $dbh = new PDO('oci:dbname=//dblab.cs.put.poznan.pl/dblab10g.cs.put.poznan.pl', 'scott', 'tiger'); //Zamknięcie połączenia $dbh=null; 3 4

Określenie parametrów połączenia Bezpośrednie wykonanie polecenia PDO->setAttribute() ustawienie atrybutów połączenia: odpowiednie dla poleceń wykonywanych w aplikacji jednokrotnie, atrybut, wartość, przykład: nazwy kolumn w zbiorze wynikowym wielkimi literami: $dbh->setattribute(pdo::attr_case, PDO::CASE_UPPER); polecenie parsowane przy każdym uruchomieniu, można użyć do wykonania zapytania, jednak nie ma dostępu do jego wyniku (brak zbioru wynikowego), PDO->exec() bezpośrednie wykonanie polecenia: liczba przetworzonych wierszy $dbh->exec("update pracownicy set placa_pod=placa_pod*1.1"); 5 6 Bezpośrednie wykonanie zapytania PDO->query() bezpośrednie wykonanie zapytania: obiekt klasy PDOStatement reprezentujący wynik zapytania Niepobranie całego wyniku przed ponownym wykonaniem metody PDO->query() wymaga zamknięcia kursora za pomocą metody PDOStatement->closeCursor() $stmt=$dbh->query("select * from pracownicy"); Wykonanie przygotowanego polecenia PDO->prepare() przygotowanie polecenia: tablica z parametrami dla driver-a (opcja) PDOStatement->execute () wykonanie przygotowanego polecenia: tablica ze zmiennymi wiązania dla parametrów wejściowych (opcja) $stmt=$dbh->prepare("select * from pracownicy"); 7 8

Detekcja błędów (1) Detekcja błędów (2) Trzy alternatywne tryby obsługi błędów: PDO::ERRMODE_SILENT tryb domyślny, PDO ustawia kod błędu, który można odczytać za pomocą: PDO->errorCode(), PDOStatement->errorCode() zwraca SQLCODE - pięcioznakowy, alfanumeryczny ciąg wg standardu ANSI SQL-92 PDO->errorInfo(), PDOStatement->errorInfo() zwraca tablicę trzyelementową: 1-szy element SQLCODE 2-gi element numer błędu specyficzny dla źródła danych try { $dbh->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); $dbh->exec("update pracownicy set placa_pod=placa_pod*1.1"); catch (PDOException $e) { echo "Błąd wykonania: ". $e->getmessage(); 3-ci element tekst błędu specyficzny dla źródła danych PDO::ERRMODE_WARNING oprócz ustawienia kodu błędu, PDO emituje tradycyjny komunikat E_WARNING, przydatny przy testowaniu aplikacji PDO::ERRMODE_EXCEPTION oprócz ustawienia kodu błędu, PDO zgłasza wyjątek PDOException, ułatwia czytelną organizację kodu obsługującego błędy 9 10 Zmienne wiązania (1) Zmienne wiązania (2) polecenie przygotowywane może być sparametryzowane, oznaczenie zmiennej znak? lub :nazwa_zmiennej PDOStatement->bindParam() wiąże zmienną wiązania ze zmienną aplikacji: pozycja zmiennej lub jej nazwa zmienna aplikacji typ danych dla zmiennej + tryb IN/OUT (opcja): PDO::PARAM_BOOL reprezentuje typ logiczny, PDO::PARAM_NULL reprezentuje wartość pustą, PDO::PARAM_INT reprezentuje typ SQL INTEGER, PDO::PARAM_STR reprezentuje typy SQL CHAR, SQL VARCHAR, PDO::PARAM_LOB reprezentuje duży obiekt (LOB), PDO::PARAM_STMT reprezentuje zbiór wynikowy, aktualnie nie wspierany przez żaden driver, PDO::PARAM_INPUT_OUTPUT określa jako parametr rodzaju INOUT dla składowanych procedur. Należy użyć bitwise-or tej wartości i typu danych PDO::PARAM_*. długość zmiennej typu OUT $stmt=$dbh->prepare('select nazwisko from pracownicy where id_zesp=:id_zesp and etat=:etat'); $id_zesp=10; $etat='dyrektor'; $stmt->bindparam(':id_zesp', $id_zesp); $stmt->bindparam(':etat', $etat); $id_zesp=20; $etat='asystent'; $stmt=$dbh->prepare('select nazwisko from pracownicy where id_zesp=? and etat=?'); $id_zesp=10; $etat='dyrektor'; $stmt->bindparam(1, $id_zesp); $stmt->bindparam(2, $etat); $id_zesp=20; $etat='asystent'; 11 12

Zbiór wynikowy Przeglądanie zbioru wynikowego (1) PDOStatement->columnCount() metoda odczytująca liczbę kolumn w zbiorze wynikowym liczba kolumn zbioru wynikowego, 0 jeżeli polecenie nie zwraca zbioru wynikowego PDOStatement->getColumnMeta() metoda odczytująca metadane kolumny numer kolumny (zliczany od zera) tablica asocjacyjna zawierająca następujące informacje: natywny (PHP) typ danych kolumny wykorzystany do reprezentacji danych z kolumny, typ SQL, flagi ustawione dla kolumny, nazwa kolumny, długość, precyzja, typ PDO $stmt = $dbh->query('select * FROM pracownicy'); for ($i=0; $i<$stmt->columncount(); $i++){$meta = $stmt->getcolumnmeta($i); var_dump($meta); PDOStatement->fetch() metoda pobierająca kolejny wiersz zbioru wynikowego stała określająca typ wartości zwrotnej wartość zwrotna, której typ jest zależny od wartości parametru: PDO::FETCH_NUM tablica indeksowana numerem pozycji kolumny w zbiorze wynikowym (od 0), w każdym elemencie tablicy znajduje się kolejna wartość kolumny pobranego wiersza while ($row = $stmt->fetch(pdo::fetch_num)) { printf("nazwisko %s, etat %s<br>", $row[0], $row[1]); PDO::FETCH_ASSOC tablica asocjacyjna indeksowana nazwami kolumn while ($row = $stmt->fetch(pdo::fetch_assoc)) { echo "Nazwisko $row[nazwisko], etat $row[etat]<br>"; 13 14 Przeglądanie zbioru wynikowego (2) Przeglądanie zbioru wynikowego (3) PDO::BOTH tablica indeksowana zarówno pozycjami jak i nazwami kolumn PDO::FETCH_OBJ obiekt anonimowy, którego nazwy własności odpowiadają nazwom kolumn while ($row = $stmt->fetch(pdo::fetch_obj)) { echo "nazwisko {$row->nazwisko, etat {$row->etat<br>"; PDO::FETCH_LAZY kombinacja PDO::BOTH oraz PDO::FETCH_OBJ, własności obiektu są tworzone w momencie odwołania się do nich PDO::FETCH_BOUND zwraca TRUE, jeżeli powiodło się pobranie kolejnego wiersza do zmiennych związanych z kolumnami zbioru wynikowego (patrz: PDOStatement->bindColumn) PDO zwraca kolumny zbioru wynikowego jako wartości typu string PDOStatement->bindColumn() metoda wiążąca zmienne z kolumnami zbioru wynikowego numer pozycji (od 1) lub nazwa kolumny zbioru wynikowego zmienna wiązana z kolumną zbioru wynikowego typ danych zmiennej wiązania (opcja) $stmt->bindcolumn('nazwisko', $nazwisko); $stmt->bindcolumn('etat', $etat); while ($stmt->fetch(pdo::fetch_bound)) { echo "Nazwisko $nazwisko, etat $etat\n"; 15 16

Kursor przewijany (1) Kursor przewijany (2) PDOStatement->fetch() metoda pobierająca wiersz zbioru wynikowego stała określająca typ wartości zwrotnej kierunek pobierania: PDO::FETCH_ORI_NEXT pobiera następny wiersz PDO::FETCH_ORI_PRIOR pobiera poprzedni wiersz PDO::FETCH_ORI_FIRST pobiera pierwszy wiersz PDO::FETCH_ORI_LAST pobiera ostatni wiersz PDO::FETCH_ORI_ABS pobiera wiersz wskazany za pomocą bezwzględnego przesunięcia pobierania PDO::FETCH_ORI_REL pobiera wiersz wskazany za pomocą przesunięcia pobierania względem bieżącej pozycji kursora przesunięcie pobierania (opcja) wartość zwrotna, której typ jest zależny od wartości 1-szego parametru (analogicznie jak w przypadku operacji pobrania rekordu dla kursora zwykłego) $sql = 'SELECT nazwisko, etat FROM pracownicy ORDER BY placa_pod'; try { $stmt = $dbh->prepare($sql, array(pdo::attr_cursor => PDO::CURSOR_SCROLL)); $row = $stmt->fetch(pdo::fetch_num, PDO::FETCH_ORI_LAST); do { $data = $row[0]. "\t". $row[1]. "\n"; print $data; while ($row = $stmt->fetch(pdo::fetch_num, PDO::FETCH_ORI_PRIOR)); $stmt = null; catch (PDOException $e) { print $e->getmessage(); 17 18 Modyfikowanie danych Obsługa transakcji wykonanie metody PDO->exec() lub PDOStatement->execute() i następnie PDOStatement->rowCount() $rowcount = $dbh->exec("update pracownicy set placa_pod=placa_pod+1"); echo $rowcount; tryby zatwierdzania transakcji: automatyczny każde polecenie jest osobną transakcją, zatwierdzaną zaraz po zakończeniu wykonywania, tryb domyślny, ręczny transakcja musi zostać jawnie rozpoczęta przez wywołanie metody PDO->beginTransaction() i zakończona przez wywołanie metody PDO->commit() lub PDO->rollBack(), brak zakończenia transakcji przed zakończeniem wykonywania skryptu powoduje jej automatyczne wycofanie $stmt = $dbh->prepare("update pracownicy set placa_pod=placa_pod+1"); echo $stmt->rowcount(); $dbh->begintransaction(); $stmt = $dbh->prepare("update pracownicy set placa_pod=placa_pod+1"); echo $stmt->rowcount(); $dbh->commit(); 19 20