Używając wspólnego interfejsu programowania

Wielkość: px
Rozpocząć pokaz od strony:

Download "Używając wspólnego interfejsu programowania"

Transkrypt

1 PROGRAMOWANIE Pear::DB Moduł PEAR::DB Próbowanie gruszek Programowanie w językach wysokiego poziomu, jakich jak PHP, daje gwarancję, że kod może być wykorzystany przez wiele osób. Dlaczego nie zastosować tej zasady do programowania baz danych? Czy można jakoś pomóc użytkownikom platform, które nie obsługują MySQL? STEVEN GOODWIN Używając wspólnego interfejsu programowania API można sprawić, aby program mógł pracować z różnymi bazami danych bez potrzeby modyfikacji kodu źródłowego. W tym miesiącu Steven Goodwin próbuje tego dokonać przy pomocy modułu PEAR::DB (ang. pear gruszka). Cudowny moduł PEAR::DB jest modułem PHP umożliwiającym kontrolę nad bazą danych, bez potrzeby określenia, której bazy konkretnie używamy. Znaczy to, że ten sam kod może być użyty do dostępu zarówno do MySQL, jak i Oracle. Jak to działa? Kluczem do powodzenia jest stworzenie warstwy abstrakcji uniwersalnego systemu lub interfejsu programowego, tak żeby szczegóły implementacji pozostały niewidoczne. Większość z nas posługuje się po- Co to jest Pear? PEAR to skrót od PHP Extension and Application Repository (wydaje się, że niektórzy zamieniają tu Application na Add-on), jest to biblioteka dla kodu PHP, podobnie jak CPAN dla PERL. Oprócz modułów dla baz danych (DB) istnieje też kod obsługujący HTML, a także autoryzacje i szyfrowanie. niać nie tylko nazwy funkcji, ale także strukturę i format argumentów. Musimy również dostosować kody błędów. Odpowiedzią na problem jest oddzielenie specyficznej funkcji database_connect od określonej bazy i użycie wspólnych wywołań API. Należy to zrobić dla każdej funkcji przyporządkowanej do określonej bazy danych. Oczywiście wymaga to mnóstwo pracy. Całe szczęście, że ktoś to zrobił za nas! W PHP mamy kilka interfejsów programowych (API) dla baz danych. W tym artykule skupimy się na PEAR::DB, jednym z wielu dobrych modułów PEAR dostępnych pod adresem [1]. Znajduje się on w fazie aktywnego rozwoju prowadzonego przez kilku najważniejszych programistów projektu PHP. Obecna wersja uznawana za stabilną to Dla tych, którzy chcą porównać PERA::DB z konkurencją polecamy ADOdb [2], Metabajęciem abstrakcji, często nie zdając sobie z tego sprawy. Nawet programiści C zatwardziali przestępcy w świecie programowania, przez abstrakcję ułatwiają sobie życie. Każda funkcja, wyrażenie czy instrukcja, dzięki językowi C oddziela programistę od szczegółów sprzętowych procesora. Jest to jednak abstrakcja niskiego poziomu. Programowanie baz danych w języku SQL jest abstrakcją wysokiego poziomu. Baza typu MySQL, Postgre- SQL lub Oracle może pracować w dowolny sposób, według dowolnego algorytmu i używając dowolnych plików. Dzięki wykorzystaniu języka SQL nie musimy się martwić o szczegóły działania bazy, zamiast tego możemy poświęcić czas na ważniejsze zadania, jak tworzenie wydajnych zapytań typu inner join i select. Niestety, ten rodzaj abstrakcji nie przenosi się na sposób, w jaki programujemy bazę danych, ponieważ każda z nich ma jednak swóje własne API. W PHP możemy zainicjować dialog z bazą MySQL o nazwie fredbloggs przez użycie: $db = mysql_connect('localu host', myuser, mypass ); mysql_select_db('fredbloggs'); PostgreSQL wymaga abyśmy napisali: $db = pg_connect('host=localu host dbname=fredbloggs user=u myuser password=mypass'); Mimo że większość z tych parametrów jest opcjonalna, przenoszenie kodu pomiędzy bazami danych jest ciągle bolesne, każde polecenie connect, select i obsługa błędów muszą zostać przepisane na nowo, aby działały z inną bazą danych. Musimy zmie- 72 Maj

2 Pear::DB PROGRAMOWANIE se [3] oraz PHPlib [4]. Wykorzystanie MySQL było zbawieniem, a jednocześnie przekleństwem dla programistów PHP. Pozytywną stroną jest to, że MySQL jest zintegrowany z obecną instalacją PHP, co oznacza, że każdy bez większych problemów może wykonać dobrą stronę internetową opartą na bazie danych. Niestety z tego powodu wielu programistów nie dostrzega, że istnieją również inne bazy danych posiadające równie dobre wsparcie, jak to widać w Tabeli 2 (bazy danych obsługiwane przez PHP). Dodatkowe informacje na temat obecnej sytuacji można znaleźć w pliku docs/status. Mając na uwadze powyższe rozważania, artykuł będzie podążał najprostszą drogą od MySQL do PEAR::DB. Przyjrzymy się też prostemu przykładowi bazy danych kanałów telewizyjnych na stronie wygenerowanej za pomocą PHP. Misja specjalna Korzystanie z PEAR::DB polega właściwie na aktualizacji oprogramowania, dlatego wcześniej musimy dysponować już istniejącą aplikacją. Aby spełnić tę role powrócimy do tematu artykułu sprzed miesiąca i naszego maila do bramki wideo [5]. Zamiast zapisywać kanały TV jawnie w pliku wsadowym, umiejscowimy odnoszące się wpisy (stacje, kanały i nazwy) w niedużej bazie danych. Na początek wprowadzimy zrzut kodu SQL do bazy danych w standardowy sposób, zezwalając na dostęp odpowiedniemu użytkownikowi (na przykład www-data). Do bazy dostajemy się używając MySQL, tak jak na Listingu 2. W tym raczej prostym fragmencie kodu (dla przejrzystości usunięto kontrolę błędów) mamy nie mniej niż 5 oddzielnych odwołań do MySQL. Zamiast odwoływania się do tabeli tv.channels, niektórzy pewnie woleliby, żeby określić aktualną bazę, używając mysql_select_db('tv'); Działa to w ten sam sposób, jak polecenie use z linii komend MySQL, z tym że dodaje jeszcze jedno wywołanie MySQL. Po zmianie serwera bazy danych każde odwołanie do mysql musi zostać przepisane. Przy większej ilości funkcji i obsłudze większej ilości baz danych ilość powtórzeń w kodzie wzrasta. Zazwyczaj jedynym powodem zmian jest przenoszenie hosta bazy danych, użytkownika i hasła do oddzielnego pliku, np. dbase.inc. $dbhost = 'localhost'; $dbuser = 'www-data'; $dbpass = ''; $dbname = 'tv'; Ale to jeszcze nie wystarczy. Potrzebujemy warstwy abstrakcji, takiej jak PEAR::DB. Większość instalacji zawiera domyślnie bibliotekę PEAR::DB, zwykle w /usr/share/pear. Aby potwierdzić, czy instalacja zawiera pełny system wpisujemy, <?php require_once 'DB.php';?> Jeżeli nie, możemy użyć do instalacji PEAR Packet Manager (używając polecenia pear install DB) lub ręcznie, używając archiwum tar. Dalsze szczegóły co do procesu instalacji PEAR można znaleźć w podręczniku on- -line, znajdującym się pod adresem [6]. Alternatywnie można skopiować pliki do katalogu domowego (say ~/pear/) i zmienić ścieżkę dostępu PHP include. Będzie to konieczne, jeżeli nie mamy uprawnień root-a na komputerze, np. <?php ini_set('include_path', U '~/pear/lib'.path_separator.iniu _get('include_path'));?> Teraz mamy dostęp do nowych funkcji obsługi baz danych, zgodnych z konwencją nazw PEAR. Jak zacząć pracę z PEAR? Oczywistym miejscem są funkcje podstawowe, jak connect i close. W porównaniu do poprzednich wersji MySQL i PostgreSQL, PEAR::DB wymaga jedynie nieznacznej zmiany. Ponieważ inne bazy danych mogą wymagać mniej lub więcej parametrów, prosta funkcja zamiany, która zmieni nazwy parametrów nie będzie działać. Zamiast tego musimy określić nazwę źródła danych data source name, czyli DSN. Zbierzemy tym samym wszystkie możliwe argumenty do pojedynczego sformatowanego łańcucha znaków. Listing 1: Przykładowa baza danych TV CREATE DATABASE IF NOT EXISTS tv; USE tv; drop table IF EXISTS channels; CREATE TABLE channels ( station smallint(2) NOT NULL default '0', channel smallint(2) default NULL, name varchar(10) default NULL, PRIMARY KEY (station) ) TYPE=MyISAM; INSERT INTO channel VALUES (1,55,'TVP 1'); INSERT INTO channel VALUES (2,62,'TVP 2'); INSERT INTO channel VALUES (3,59,'TVN'); INSERT INTO channel VALUES (4,65,'Polsat'); INSERT INTO channel VALUES (5,37,'TVP4'); Listing 2: Dostęp przez MySQL function GetStationsList() $db = mysql_connect("localhost", "www-data", ""); $query = "SELECT * FROM tv.channels"; $result = mysql_query($query); while ($row = mysql_fetch_array($result, MYSQL_NUM)) print "$row[0] - $row[2] ($row[1])<br>"; mysql_free_result($result); mysql_close($db); Maj

3 PROGRAMOWANIE Pear::DB Format tego łańcucha wygląda następująco: phptype(dbsyntax)://username:u databasename DSN wygląda jak adres internetowy, określa, gdzie się połączyć i w jaki sposób określona baza danych ma być użyta oraz jakich opcji użyć podczas łączenia. Pierwsza część opisuje, jakiej bazy użyto i zawiera opis rodzaju bazy (określanego jako phptype, np.: mysql) oraz wszystkie specyficzne dla określonej bazy wymagania, podane w dbsyntax. Lista phptype jest pokazana w Tabeli 2. Często podawany przykład łańcucha dbsyntax jest nazwą odpowiedniego sterownika podczas używania bazy ODBC (access, db2, mssql). Nie jest to trudne do ustalenia, ale dotyczy bardziej użytkowników Windows, nie musimy więc dalej się tym zajmować. Druga część DSN zawiera wszystko, co jest niezależne od bazy danych, jak nazwa hosta, port, nazwa użytkownika i hasło. Tak jak w zwykłej funkcji mysql_connect, nie wszystkie parametry są obowiązkowe, w razie potrzeby mogą zostać opuszczone. Na przykład: mysql://www-data@localhost/tv Naturalnie nasz finalny kod zapisze te parametry we wspólnym pliku dbase.inc, tak jak to poprzednio pokazaliśmy. DSN nie musi być wyspecyfikowany jako łańcuch znaków. Może być także podany jako tablica, jak to zostało wyszczególnione w ramce -- DSN jako tablica. To rozwiązanie jest nieco szybsze, bo do inicjalizacji nie ma potrzeby pobierania żadnego łańcucha. DSN pozwala też określić opcje inicjujące przy użyciu zbliżonej do adresu internetowego metody?option1=value1&option2=value2. Dostępnych jest kilka opcji, które opisują zarówno praktyczne cechy dotyczące połączenia (użycie SSL), jak i te pomocne w programowaniu (kontrola wiadomości o błędach). DSN jako tablica $dsn = array( 'phptype' => mysql, 'hostspec' => localhost, 'database' => tv, 'username' => www-data, 'password' => ); $db = DB::connect($dsn); Ponieważ opcje te mogą się różnić między określonymi kwerendami, nie będziemy ich włączać do DSN. Zamiast tego utworzymy tablicę, która je wyszczególnia i przekażemy je osobno do funkcji DB::connect. $dsn = $dbbackend://$dbuseru bhost/$dbname ; $options = array( debug => 2); $db =& DB::connect($dsn, U $options); Opcje te mogą być w każdej chwili zmienione przez użycie funkcji: $db->setoption('debug', 0); Połączenie powinno działać (obsługą błędów zajmiemy się później), będziemy odtąd mieć do dyspozycji obiekt bazodanowy o nazwie $db, który używany jest we wszystkich innych wywołaniach tej bazy np. do zamykania bazy po użytkowaniu. $db->disconnect(); Następnie musimy przystąpić do przystosowania istniejących funkcji do użycia nowego obiektu i stowarzyszonych funkcji. Nie jest to trudne, ponieważ mają one bardzo zbliżone nazwy do ich oryginalnych wersji w MySQL. Zatem, na przykład mysql_query stanie się query, a mysql_fetch_array będzie fetchrow. Nasza podstawowa funkcja jest pokazana na Listingu 3. Czarne pudełko Ponieważ wszystkie zapytania do bazy przechodzą przez sterownik PEAR::DB, kod wewnątrz sterownika ma możliwość zmiany, a także narobienia bałaganu z zapytaniem. To konkretna cena za przenośność i uniwersalność. Poziom dopuszczalnej ingerencji można ustawiać w opcjach dotyczących przenośności, dostępnych w metodzie setoption, którą już widzieliśmy. Te kompromisy pomiędzy przenośnością i wydajnością w wielkim stopniu zależą od konkretnej aplikacji. Opcje te mogą być też użyte do obsługi starszego kodu przez PE- AR::DB. Według konwencji większość nazw tablic jest opisana małymi literami. Na przykład, jeżeli aplikacja próbuje pobrać dane używając mieszanych, małych i dużych liter, nazwy zostaną automatycznie przekonwertowane na małe litery: $db->setoption('portability', U DB_PORTABILITY_LOWERCASE); Usuwa to element niespodzianki, który pojawia się, gdy nieznany kod zawiesza aplikację. Inne opcje dostępne tutaj są podane w Tabeli 1. Domyślnie wszystkie te opcje są włączone dla zwiększenia wydajności, jednak od nas zależy, które z nich będą włączone. Istnieją też definicje dla DB_PORTABILITY_ALL i DB_PORTABILITY_NONE, które przełączają flagi. Przemieszczanie się w tłumie Nie wszystkie funkcje idą w kierunku uczynienia łatwiejszym dostępu do bazy danych. Na przykład fetchrow ułatwia pobieranie danych w formacie przyjaznym raczej dla programisty. PEAR::DB obecnie wspiera trzy takie formaty. Domyślnie będzie to tablica sortowana od zera, jak pokazano w przykładzie powyżej. Opcjonalny para- Listing 3: Konwencja nazw w PEAR function PearVersion() global $dbname, $dbhost, $dbuser, $dbbackend; $dsn = $dbbackend://$dbuser@$dbhost/$dbname ; $db =& DB::connect($dsn); $query = 'SELECT * FROM channels'; $result = $db->query($query); while ($row = $result->fetchrow()) print $row[0] $row[2] ($row[1])<br> ; $result->free(); $db->disconnect(); 74 Maj

4 Pear::DB PROGRAMOWANIE Opcja Tabela 1:Opcje zawiązane z przenośnością DB_PORTABILITY_LOWERCASE DB_PORTABILITY_RTRIM DB_PORTABILITY_DELETE_COUNT DB_PORTABILITY_NUMROWS DB_PORTABILITY_ERRORS DB_PORTABILITY_NULL_TO_EMPTY Opis metr w DB_FETCHMODE_ORDERED został w tym przykładzie pominięty. Jest to użyteczne do obsługi prostych baz danych lub wyświetlania tabel bez potrzeby znajomości nazw pól lub odniesień. W większości jednak sytuacji numeryczne indeksy nie są wystarczająco opisowe, możemy więc zażądać, aby rezultaty otrzymywać w skojarzonej tablicy. Kosztem uogólnień otrzymamy dużo łatwiejszy do analizy kod. while ($row = $result->fetchrowu (DB_FETCHMODE_ASSOC)) print $row['station'].' U '.$row['name'].' ('.$rowu ['channel'].')<br>'; W końcu fetchrow dostarcza sposobów na użycie zorientowanych obiektowo możliwości PHP do zwracania obiektu dla każdego wiersza tabeli wyników. Każda kolumna jest oznaczona jako własność obiektu. Tak jak poprzednio, sprawia to, że kod jest łatwiejszy do analizy, jednak możliwości zastosowania dla bardziej uniwersalnych aplikacji są ograniczone. while ($row = $result->fetchrowu (DB_FETCHMODE_OBJECT)) print $row->station.' U '.$row->name. ' ('.$row->u channel.')<br>'; Wykryć błąd Żaden program nie jest właściwie napisany, jeśli nie posiada obsługi błędów i dokumentacji. Rzeczy te nie fascynują programistów, ale są konieczne. Możliwości obsługi błędów w PEAR::DB zostały ujednolicone (choćby przez odpowiednie kody błędów) i wynikają z podstawowych możliwości obsługi błędów w PEAR_Error. W przypadku niepowodzenia jakiejś funkcji z PE- AR::DB, większość z nich zwróci konkretną Konwertuje nazwy pól i tabel na małe litery (przy get i fetch) Obcina wyjście od prawej Zawsze raportuje liczbę skasowanych rzędów Wspomaga numrows w Oracle Odwzorowuje wiadomości o błędach między różnymi bazami danych Konwertuje zera do pustych łańcuchów (przy get i fetch), ponieważ Oracle nie rozpoznaje między nimi różnicy klasę błędu od najwyższej connect do najniższej getrow. Klasa ta nie tylko przechowuje błąd z funkcji PEAR, ale też dodatkowe informacje przydatne w usuwaniu problemów. $db =& DB::connect($dsn); // DB::isError is the same as U PEAR::isError if (DB::isError($db)) print $db->getmessage(); print $db->getdebuginfo(); Błędy mogą być także wychwytywane przy użyciu standardowej procedury obsługi błędów w PEAR. Jest to definiowana przez użytkownika funkcja, która będzie wywołana zawsze, gdy moduł PEAR (jak db) wygeneruje błąd. Ta funkcja może być użyta do stworzenia kodu generującego dla użytkownika standardową stronę HTML, informującą administratora o problemie. Programy obsługi błędów są tradycyjnie połączone z możliwościami PHP, co do przekazywania wyników do buforowanego wyjścia, co umożliwia czyszczenie wynikowego kodu HTML. Jednak tradycyjne błędy (takie jak dzielenie przez zero) nie będą tu wyłapywane. // Przygotuj uchwyt PEAR::setErrorHandling(PEAR_ERRU OR_CALLBACK, 'error_function'); // włącz buforowanie wyników ob_start(); // uruchom kod PearVersion(); Name dbase FrontBase InterBase Informix Mini SQL Microsoft SQL Server MySQL MySQL >=4.1 Oracle 7/8/9 ODBC PostgreSQL SQLite Sybase Listing 4: tableinfo Tabela 2: Obsługiwane bazy danych Keyword dbase fbsql ibase ifx msql mssql mysql mysql4 oci8 odbc pgsql sqlite sybase // zrzuć zawartość bufora ob_end_flush(); // przygotuj uchwyt function error_function($err) ob_end_clean(); print 'Wystapil blad ('.$err->u getmessage().')!'); exit; Właściwości PEAR::DB PEAR::DB jest rzeczywiście tak łatwy, jak na to wygląda. Złożoność pochodzi od samego SQL. PEAR::DB chroni jedynie przed niektórymi problemami. SQL istnieje od wielu lat, jednak w ramach wojen pomiędzy poszczególnymi dostawcami zostały dodane różne rozszerzenia SQL, co sprawia, że poszczególne implementacje są ze sobą niekompatybilne. Mimo że komitet ANSI kierował standaryzacją części języka (podstawowe wersje select, insert i update są w pełni przenośne), istnieje nadal wiele problemów. Pisanie w standardowym SQL-u jest wyzwaniem samym w sobie i istnieje kilka reguł, które należy w tym celu poznać. Większość specjalizujących się w bazach danych programistów zna je doskonale, początkujący mogą sięgnąć do tutoriali, takich jak [7]. Często chcemy wiedzieć, jak baza zare- $tableinfo = $result->tableinfo()); for($col=0; $col < $result->numcols(); $col++) print $tableinfo[$col]['name']." is a ".$tableinfo[$col]['type']; Maj

5 PROGRAMOWANIE Pear::DB Tabela 3: Tabela 4: Zakres testowania Ograniczenia SQL przy pomocy provides Database SQL Syntax string Functionality DB2 select * from table fetch prepare Czy baza sprawdza wstępnie kolejkę SQL Informix first 10 rows only select first 10 * from table pconnect Persistentne połączenia Microsoft SQL Server select top 10 * from table transactions Czy baza wspiera transakcje MySQL select * from table limit 10 limitograniczone kolejki selectoracle 8i select * from (select * from table) where rownum <= 10 PostgreSQL select * from table limit 10 aguje na określone zapytanie, zanim je wykonamy. Wymaga to dodatkowej pracy, którą albo wykonamy sami albo poprzez PE- AR::DB. Niestety, jeżeli już dostaliśmy się do bazy, nie ma często sposobu, aby dowiedzieć się, czy potrafi ona obsługiwać określone polecenia SQL. Metoda provides pokazuje możliwości aktualnej bazy danych. Pozwala na przełączanie pomiędzy dwoma ręcznie dostrojonymi kwerendami, tak aby zwiększyć wydajność. Przecież nowa wersja bazy danych może oferować nową cechę, dlatego metoda provides użyta w PEAR::DB umożliwia budowanie bardziej optymalnych kwerend dla naszej bazy bez znajomości szczegółów o nowej bazie danych. if ($db->providesu ('transactions')) print 'Super! Ta funkcja jest U obsługiwana'; Zakres możliwości, które można przetestować, pokazano w Tabeli 3. W każdym z przypadków możliwe jest, że baza nie wspiera sama w sobie danej funkcji. Słowem kluczowym jest tutaj natively, ponieważ istnieje rozróżnienie pomiędzy wewnętrznym procesorem bazy a sterownikiem PEAR::DB. Na przykład, jeżeli baza danych nie posiada wsparcia dla poleceń prepare/execute, sterownik obsłuży pojawienie się tego polecenia poprzez emulację. Kuszące może być tu użycie provides do utworzenia zupełnie odmiennych, ręcznie optymalizowanych kolejek dla każdej bazy danych. W większości przypadków nie jest to konieczne. Powód (niektórzy powiedzą wymówka) dla tego rodzaju zwyczajów wynika z rozszerzeń, które są widoczne wewnątrz SQL. Typowy przykład tego problemu pochodzi z ograniczeń kolejek select, co prowadziło do zatrzymania generowania rezultatów po, powiedzmy, pierwszych dziesięciu rzędach. Obecnie wszystkie bazy danych potrafią wykonać to działanie, lecz za pomocą różnych kolejek (Tabela 4). Pisanie kodu dla każdego z przykładów to mnóstwo dodatkowej pracy. Ponieważ nie możemy się troszczyć o każdą bazę danych (razem z nowymi i tymi jeszcze nie napisanymi), nasz kod stanie się bardzo szybko nieprzenośny i narażony na obumieranie. Problem ten łatwo rozwiązać, jakkolwiek musimy tu zastosować te same zasady abstrakcyjności. PEAR::DB dostarcza metody nazywającej się limitquery, która ukrywa przed nami dokładną składnię i stosuje to, co jest kompatybilne z aktualną bazą danych. Jest to bardziej optymalne niż pisanie oddzielnych kolejek dla każdej bazy. $query = SELECT name FROM U channels ; // no reference to U limits here! $result = limitqueryu ($query, 2, 1); Polecenie to pobiera 1 wiersz z rezultatów wykonanej kwerendy, zaczynając od indeksu 2, ponieważ trzeci wpis liczy się od 0. Jeżeli zapytanie typu select może zostać zmodyfikowane, tak aby utworzyć odpowiedni łańcuch w pytaniu do bazy danych, $db->provides('limit') zwróci alter i kwerenda, zanim będzie przekazana dalej, zostanie przekształcona przez sterownik PE- AR::DB. W przeciwnym razie provides zwróciłoby emulate, ponieważ sterownik może wykonywać kwerendę na zasadzie wiersz za wierszem, albo mogłaby zostać zwrócona wartość false. Powinno się zawsze kolejkować zasoby bazy używając rezultatu z provides, a nie polegać na własnej pamięci czy doświadczeniu. Tabela 5 pokazuje aktualny zestaw sterowników. Z uwagi na błędy, czasem konieczna jest wiedza o tym, jakiej dokładnie używamy bazy. Jeżeli nie można usunąć błędów, musimy wiedzieć, gdzie się one znajdują, aby przynajmniej móc ich unikać. print $db->phptype; Polecenie powyżej pokaże nam te same identyfikatory, jak te w Tabeli 2. Szczegóły dotyczące błędów w bazach danych nie są celem niniejszego artykułu. Tylko dla was PEAR::DB nie tylko umożliwia budowanie warstwy abstrakcji dla kodu obsługi baz danych. Jako bonus otrzymujemy kilka narzędzi do obsługi samych danych, jak numrows i numcols. Listing 5: assertextension if (DB::assertExtension('oci8')) print 'Uzywamy Oracle jesli musimy...'; if (DB::assertExtension('mysql )) print Uzywam MySQL bo lepiej go znam... ; print Polecenie select zwrocilo U '.$result->numrows(). ' rows'; print 'Polecenie select zwrocilo U '.$result->numcols(). ' cols'; Efekty działania tych funkcji są samowyjaśniające i można to wydedukować z samego zapytania select. Oszczędzają ręcznego liczenia kolumn, gdy kwerenda jest generowana automatycznie. Mamy też metodę tableinfo, która dostarcza informacji, takich jak nazwa i typ dla każdej kolumny w rezultatach zapytania. Jest to użyteczne nie tylko przy wynajdywaniu błędów, ale także do tworzenia uniwersalnych aplikacji bazodanowych. Mamy możliwość zaznaczania kolorem różnych kolumn w zależności od ich rodzaju lub podświetlania pola klucza (Listing 4). Poza name i type można (używając składni użytej w przykładzie powyżej) wykonywać pytania o len (długość), flags (wskazuje na primary key) i table nazwę tabeli, dla każdej kolumny. Mimo że większość interfejsów programowych API wspiera zapytanie typu select, możemy też zostać obdarowani rezultatami kwerend typu insert. Jednym z przydatnych narzędzi jest metoda affectedrows, zwracająca liczbę wierszy, na które ma wpływ kwerenda typu 76 Maj

6 Pear::DB PROGRAMOWANIE Tabela 5: Co umożliwia provides Database prepare pconnect transactions limit FrontBase false true true emulate InterBase true true true false Informix false true true emulate Mini SQL false true false emulate Microsoft SQL false true true emulate MySQL false true true alter Oracle 8i false true true alter ODBC true true false emulate PostgreSQL false true true alter Sybase false true false emulate insert, delete czy update. Mamy też możliwość generowania unikalnych ID, używając do tego funkcji sekwencyjnej nextid, która jest pomocna przy generowaniu unikalnych kluczy nie jest to obsługiwane przez MySQL. Na przykład: // Get a new ID. $id = $db->nextid('sequence'); U // (the sequence will be U created if it doesn't exist) Inną użyteczną właściwością jest statycznie deklarowana metoda assertextension nie wymaga obiektu bazy danych i będzie wskazywała, które z funkcji zostały zawarte w obecnej instalacji. Można określić, które bazy danych są zainstalowane w systemie i które z nich najbardziej pasują nam do użycia wewnątrz aplikacji (Listing 5). Pomimo swojej nazwy, nie jest to asercja w tradycyjnym programistycznym sensie, ponieważ żaden błąd nie jest tu wyraźnie zwracany. Metoda stwierdza jedynie, czy jakieś rozszerzenie istnieje lub nie. Wspomnijmy też o łączeniu pary prepare i execute. Jest to właściwość pozwalająca przygotować prepare kwerende do wielokrotnego użycia poprzez to, że elementy te są prekompilowane i rozkładane na tokeny. Kwerenda będzie się składać z miejsc zarezerwowanych dla innych informacji, dlatego może być wykonywana execute wiele razy z różnymi danymi wstawianymi w miejsca zarezerwowane (Listing 6). MetodaexecuteMultiple sprawdza zapytania SQL, INSERT INTO channels (station, U name, channel) VALUES (6, U 'Video', 0); INSERT INTO channels (station, U name, channel) VALUES (7, U 'PS2', 39); Listing 6: Przygotowanie zapytania $generic = $db->prepare('insert INTO channels (station, name, channel) VALUES (?,?,?)'); $data = array ( array(6, 'Video', 0), array(7, 'PS2', 39) ); $res = $db->executemultiple($generic, $data); Metoda executemultiple zatrzyma się na pierwszym błędzie, aby temu zapobiec będziemy musieli wykonywać każde kolejne zapytanie z pomocą metody execute. Na przykład, foreach ($data as $row) $db->execute($generic, $row); Ponadto tablica danych musi być indeksowana od zera. W większości przypadków powinniśmy zauważyć zwiększenie szybkości, gdy jednocześnie wprowadzanych będzie do bazy kilka wpisów. Korzyść jednak zależy od tego, czy baza danych posiada bezpośrednie wsparcie dla tej funkcji, niestety nie wszystkie posiadają. Idziemy na wojnę Posiadając w swoim arsenale PEAR::DB otrzymujemy możliwość atakowania większości baz danych, bez martwienia się o brakujące funkcje. Dzięki szerokiemu zakresowi metod możemy napisać w PHP dobrą, niezależną od platformy aplikację bazodanową, bez przejmowania się pomniejszymi problemami. INFO [1] PEAR: [2] ADOdb: [3] Metabase: [4] PHPlib: [5] Linux Magazine, nr 41, kwiecień 2004, str. 72 [6] PEAR manual: manual/en/installation.cli.php [7] Writing Portable SQL Code: Prenumerata Linux Magazine Nie przegap takiej okazji Zamawiając prenumeratę oszczędzasz! Płacisz jak za 9 numerów, a otrzymujesz 12! Z każdym numerem DVD lub płyta CD-ROM. Najszybszy sposób zamówienia prenumeraty: Infolinia:

Podstawy programowania III WYKŁAD 2

Podstawy programowania III WYKŁAD 2 Podstawy programowania III WYKŁAD 2 Jan Kazimirski 1 Komunikacja z bazami danych 2 PHP i bazy danych PHP zapewnia dostęp do wielu popularnych baz danych. Kilka poziomów abstrakcji: Funkcje obsługujące

Bardziej szczegółowo

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

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK Dostęp do baz danych z serwisu www - PHP Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK Bazy Danych I, 8 Grudzień 2009 Plan Trochę teorii Uwagi techniczne Ćwiczenia Pytania Trójwarstwowy

Bardziej szczegółowo

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych Języki programowania wysokiego poziomu PHP cz.4. Bazy danych PHP i bazy danych PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł

Bardziej szczegółowo

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

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł mysqli ma dwa interfejsy: proceduralny i obiektowy) PostgreSQL Oracle MS

Bardziej szczegółowo

PHP: bazy danych, SQL, AJAX i JSON

PHP: bazy danych, SQL, AJAX i JSON 1 PHP: bazy danych, SQL, AJAX i JSON SYSTEMY SIECIOWE Michał Simiński 2 Bazy danych Co to jest MySQL? Jak się połączyć z bazą danych MySQL? Podstawowe operacje na bazie danych Kilka dodatkowych operacji

Bardziej szczegółowo

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

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się. Za operacje na bazie odpowiada biblioteka mysqli (i jak improved). Posiada ona interfejs obiektowy jak i proceduralny. Podłączenie do bazy (obiektowo) mysqli:: construct() ([ string $host [, string $username

Bardziej szczegółowo

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Przetwarzanie i organizowanie danych : bazy danych Nr ćwiczenia 10 Temat Aplikacje

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x Wdrożenie modułu płatności eservice dla systemu oscommerce 2.3.x - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie

Bardziej szczegółowo

Instalacja MySQL. http://dev.mysql.com/downloads/mysql/5.0.html#downloads

Instalacja MySQL. http://dev.mysql.com/downloads/mysql/5.0.html#downloads Instalacja MySQL Baza MySQL tworzona jest przez Szwedzką firmę MySQL AB strona domowa projektu to: www.mysql.com Wersję bezpłatną (różniącą się od komercyjnej brakiem wsparcia technicznego, nośnika i podręcznika)

Bardziej szczegółowo

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu Zen Cart 1.3.9 1.5

Wdrożenie modułu płatności eservice. dla systemu Zen Cart 1.3.9 1.5 Wdrożenie modułu płatności eservice dla systemu Zen Cart 1.3.9 1.5 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie

Bardziej szczegółowo

dziennik Instrukcja obsługi

dziennik Instrukcja obsługi Ham Radio Deluxe dziennik Instrukcja obsługi Wg. Simon Brown, HB9DRV Tłumaczenie SP4JEU grudzień 22, 2008 Zawartość 3 Wprowadzenie 5 Po co... 5 Główne cechy... 5 baza danych 7 ODBC... 7 Który produkt

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

Projektowanie systemów baz danych

Projektowanie systemów baz danych Projektowanie systemów baz danych Seweryn Dobrzelewski 4. Projektowanie DBMS 1 SQL SQL (ang. Structured Query Language) Język SQL jest strukturalnym językiem zapewniającym możliwość wydawania poleceń do

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

6. Bezpieczeństwo przy współpracy z bazami danych

6. Bezpieczeństwo przy współpracy z bazami danych 6. Bezpieczeństwo przy współpracy z bazami danych 6.1. Idea ataku SQL injection Atak znany jako SQL injection jest możliwy wtedy, gdy użytkownik ma bezpośredni wpływ na postać zapytania wysyłanego do bazy

Bardziej szczegółowo

Wprowadzenie do Doctrine ORM

Wprowadzenie do Doctrine ORM Wprowadzenie do Doctrine ORM Przygotowanie środowiska Do wykonania ćwiczenia konieczne będzie zainstalowanie narzędzia Composer i odpowiednie skonfigurowanie Netbeans (Tools->Options->Framework & Tools->Composer,

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu Magento 1.4 1.9

Wdrożenie modułu płatności eservice. dla systemu Magento 1.4 1.9 Wdrożenie modułu płatności eservice dla systemu Magento 1.4 1.9 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie do

Bardziej szczegółowo

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

Wykład 5: PHP: praca z bazą danych MySQL Wykład 5: PHP: praca z bazą danych MySQL Architektura WWW Podstawowa: dwuwarstwowa - klient (przeglądarka) i serwer WWW Rozszerzona: trzywarstwowa - klient (przeglądarka), serwer WWW, serwer bazy danych

Bardziej szczegółowo

Język SQL, zajęcia nr 1

Język SQL, zajęcia nr 1 Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze

Bardziej szczegółowo

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

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java Informatyka I Standard JDBC Programowanie aplikacji bazodanowych w języku Java dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Standard JDBC Java DataBase Connectivity uniwersalny

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4 Wdrożenie modułu płatności eservice dla systemu Gekosale 1.4 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie do integracji...

Bardziej szczegółowo

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

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC. Informatyka I Programowanie aplikacji bazodanowych w języku Java. Standard JDBC. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 Standard JDBC Java DataBase Connectivity

Bardziej szczegółowo

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

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 12 Zastosowanie PHP do programowania aplikacji baz danych MySQL Wsparcie programowania w PHP baz danych MySQL Obsługa baz danych

Bardziej szczegółowo

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1 Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych

Bardziej szczegółowo

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

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

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja Zagadnienia Konstrukcja bibliotek mysql i mysqli w PHP Dynamiczne generowanie stron Połączenie, zapytanie i sesja Podstawowe opakowanie dla zapytań SQL w PHP Zarządzania uŝytkownikami Włamania do mysql

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo

5. Współpraca z bazą danych MySQL

5. Współpraca z bazą danych MySQL 5. Współpraca z bazą danych MySQL 5.1. Informacje ogólne Język PHP posiada obsługę wielu relacyjnych baz danych, jedną z najpopularniejszych jest baza MySQL. PHP pozwala na pełną współpracę z bazą. Praca

Bardziej szczegółowo

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

Wprowadzenie. Rozdział 23 PDO. Podstawowe kroki aplikacji. Źródło danych 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

Bardziej szczegółowo

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

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik Technologia Przykłady praktycznych zastosowań wyzwalaczy będą omawiane na bazie systemu MS SQL Server 2005 Wprowadzenie

Bardziej szczegółowo

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium Aplikacje WWW - laboratorium PHP + bazy danych Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej wykorzystującej technologię PHP. Aplikacja pokazuje takie aspekty, współpraca PHP z bazami

Bardziej szczegółowo

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

Pawel@Kasprowski.pl Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07 PHP i bazy danych Paweł Kasprowski pawel@kasprowski.pl Użycie baz danych Bazy danych używane są w 90% aplikacji PHP Najczęściej jest to MySQL Funkcje dotyczące baz danych używają języka SQL Przydaje się

Bardziej szczegółowo

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych

Bardziej szczegółowo

Ref. 7 - Język SQL - polecenia DDL i DML

Ref. 7 - Język SQL - polecenia DDL i DML Ref. 7 - Język SQL - polecenia DDL i DML Wprowadzenie do języka SQL. Polecenia generujące strukturę bazy danych: CREATE, ALTER i DROP. Polecenia: wprowadzające dane do bazy - INSERT, modyfikujące zawartość

Bardziej szczegółowo

Database Connectivity

Database Connectivity Oprogramowanie Systemów Pomiarowych 15.01.2009 Database Connectivity Dr inŝ. Sebastian Budzan Zakład Pomiarów i Systemów Sterowania Tematyka Podstawy baz danych, Komunikacja, pojęcia: API, ODBC, DSN, Połączenie

Bardziej szczegółowo

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie Programowanie MSQL show databases; - pokazanie jakie bazy danych są dostępne na koncie show databases; - wyświetlenie wszystkich baz danych na serwerze create database nazwa; - za nazwa wstawiamy wybraną

Bardziej szczegółowo

Struktura drzewa w MySQL. Michał Tyszczenko

Struktura drzewa w MySQL. Michał Tyszczenko Struktura drzewa w MySQL Michał Tyszczenko W informatyce drzewa są strukturami danych reprezentującymi drzewa matematyczne. W naturalny sposób reprezentują hierarchię danych toteż głównie do tego celu

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

SQL 4 Structured Query Lenguage

SQL 4 Structured Query Lenguage Wykład 5 SQL 4 Structured Query Lenguage Instrukcje sterowania danymi Bazy Danych - A. Dawid 2011 1 CREATE USER Tworzy nowego użytkownika Składnia CREATE USER specyfikacja użytkownika [, specyfikacja użytkownika]...

Bardziej szczegółowo

CREATE USER

CREATE USER Temat: Administrowanie użytkownikami bazy danych. Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest możliwość

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej   Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Laboratorium 1 Wprowadzenie, podstawowe informacje o obsłudze

Bardziej szczegółowo

Internetowe bazy danych

Internetowe bazy danych Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 6 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl Kontrola dostępu

Bardziej szczegółowo

Internetowe bazy danych

Internetowe bazy danych Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 5 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl mysql_list_tables pobranie listy tabel z bazy

Bardziej szczegółowo

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012: Systemy baz danych 16.04.2013 1. Plan: 10. Implementacja Bazy Danych - diagram fizyczny 11. Implementacja Bazy Danych - implementacja 2. Zadania: 1. Przygotować model fizyczny dla wybranego projektu bazy

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z dużej ilości danych zapisanych na serwerze jest współpraca z relacyjną bazą danych. 2 1. Utworzyć bazę danych.

Bardziej szczegółowo

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Marek Robak Wprowadzenie do języka SQL na przykładzie baz SQLite Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Tworzenie tabeli Pierwsza tabela W relacyjnych bazach danych jedna

Bardziej szczegółowo

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium Aplikacje WWW - laboratorium PHP + bazy danych Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej wykorzystującej technologię PHP. Aplikacja pokazuje takie aspekty, współpraca PHP z bazami

Bardziej szczegółowo

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

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie

Bardziej szczegółowo

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

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ]; Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server

Bardziej szczegółowo

Paweł Rajba

Paweł Rajba Paweł Rajba pawel@cs.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Używanie kursorów Rodzaje kursorów Praca z kursorami Co to jest kursor? Cykl życia kursora utworzenie pobieranie wartości ewentualnie

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

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

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science Systemy internetowe Wykład 4 mysql MySQL - wstęp SZBD: komercyjne: Microsoft SQL Server, Oracle, DB2... darmowe: MySQL, PostgreSQL, Firebird... MySQL darmowy (użytek niekomercyjny) Wady: niska wydajność

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 2 Kusory Wprowadzenie Kursory użytkownika Kursory domyślne Zmienne kursora Wyrażenia kursora - 2 - Wprowadzenie Co to jest kursor?

Bardziej szczegółowo

Wykład I. Wprowadzenie do baz danych

Wykład I. Wprowadzenie do baz danych Wykład I Wprowadzenie do baz danych Trochę historii Pierwsze znane użycie terminu baza danych miało miejsce w listopadzie w 1963 roku. W latach sześcdziesątych XX wieku został opracowany przez Charles

Bardziej szczegółowo

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wprowadzenie do projektowania i wykorzystania baz danych Relacje Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR

Bardziej szczegółowo

Bazy danych. Polecenia SQL

Bazy danych. Polecenia SQL Bazy danych Baza danych, to miejsce przechowywania danych. Dane w bazie danych są podzielone na tabele. Tabele składają się ze ściśle określonych pól i rekordów. Każde pole w rekordzie ma ściśle ustalony

Bardziej szczegółowo

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL Tutorial PostgreSQL 1. Instalacja na własnym komputerze: a. Zainstaluj program ze strony: https://www.postgresql.org/download/ Wersja odpowiednia dla systemu operacyjnego Linux, Mac, Windows Przy pierwszym

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 6 Marcin Młotkowski 14 listopada 2012 Plan wykładu Trwałość obiektów Bazy danych DBM Bazy danych SQL Active records Szeregowanie obiektów Obiekt Serializacja @tytul = 'Pan Tadeusz'

Bardziej szczegółowo

Dlaczego PHP? - zalety

Dlaczego PHP? - zalety Dlaczego PHP? - zalety (+) bezpieczeństwo kodu - PHP wykonuje się po stronie serwera ( niezależność od przeglądarki) (+) bezpieczeństwo danych - wykorzystanie ssl i HTTPS (+) PHP jako moduł serwera WWW

Bardziej szczegółowo

Składowane procedury i funkcje

Składowane procedury i funkcje Składowane procedury i funkcje Procedury i funkcje są zestawem poleceń SQL, które są przechowywane na serwerze (tak jak dane w tablicach). Istnieją sytuacje, kiedy procedury i funkcje są szczególnie przydatne.

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność

Bardziej szczegółowo

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP Zad. 1 Dla każdego zamówienia wyznaczyć jego wartość. Należy podać numer zamówienia oraz wartość. select z.id_zamowienia, sum(ilosc*cena) as wartosc

Bardziej szczegółowo

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , , Celem ćwiczeń jest zaprojektowanie oraz utworzenie na serwerze bazy danych przechowującej informacje na temat danych kontaktowych. Celem jest również zapoznanie z podstawowymi zapytaniami języka SQL służącymi

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

Bardziej szczegółowo

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PRZESTRZENNE BAZY DANYCH WYKŁAD 2 PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie

Bardziej szczegółowo

Bazy Danych i Usługi Sieciowe

Bazy Danych i Usługi Sieciowe Bazy Danych i Usługi Sieciowe Ćwiczenia I Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) BDiUS ćw. I Jesień 2011 1 / 15 Strona wykładu http://bioexploratorium.pl/wiki/ Bazy_Danych_i_Usługi_Sieciowe_-_2011z

Bardziej szczegółowo

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Wprowadzenie do JDBC z wykorzystaniem bazy H2 Wprowadzenie do JDBC z wykorzystaniem bazy H2 JDBC (ang. Java DataBase Connectivity). Biblioteka stanowiąca interfejs umożliwiający aplikacjom napisanym w języku Java porozumiewać się z bazami danych za

Bardziej szczegółowo

Leszek Stasiak Zastosowanie technologii LINQ w

Leszek Stasiak Zastosowanie technologii LINQ w Leszek Stasiak Zastosowanie technologii LINQ w C# 1. Wstęp - połączenie Do naszych zadań będziemy używać Microsoft Visual Studio 2010. Stwórzmy nowy projekt Windows Form Application. Mając do dyspozycji

Bardziej szczegółowo

Założenia do ćwiczeń: SQL Server UWM Express Edition: 213.184.8.192\SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Założenia do ćwiczeń: SQL Server UWM Express Edition: 213.184.8.192\SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń. Cel: polecenia T-SQL Założenia do ćwiczeń: SQL Server UWM Express Edition: 213.184.8.192\SQLEXPRESS Authentication: SQL Server Authentication Username: student01,, student21 Password: student01,., student21

Bardziej szczegółowo

Uruchamianie bazy PostgreSQL

Uruchamianie bazy PostgreSQL Uruchamianie bazy PostgreSQL PostgreSQL i PostGIS Ten przewodnik może zostać pobrany jako PostgreSQL_pl.odt lub PostgreSQL_pl.pdf Przejrzano 10.09.2016 W tym rozdziale zobaczymy, jak uruchomić PostgreSQL

Bardziej szczegółowo

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Podstawy języka SQL. SQL Structured Query Languagestrukturalny Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy

Bardziej szczegółowo

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Co dziś będziemy robić Uwierzytelnianie użytkowników, Obiekt session, Silniki

Bardziej szczegółowo

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

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech BAZY DANYCH Obsługa bazy z poziomu języka PHP opracowanie: Michał Lech Plan wykładu 1. PHP - co to jest? 2. Bazy danych obsługiwane przez PHP 3. Podstawowe polecenia 4. Sesje 5. Przykład - dodawanie towaru

Bardziej szczegółowo

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007

Sprzeg podstawowy do baz danych w PHP Mateusz Sowa, 2007 1. Wstęp PHP jest to skryptowy język programowania wykonywany po stronie serwera (server-side) służący do generowania stron internetowych. Skrypty napisane w PHP po uruchomieniu nie są kompilowane do postaci

Bardziej szczegółowo

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r.

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Bazy danych dla producenta mebli tapicerowanych Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Założenia Stworzyć system bazodanowy dla małej firmy produkującej meble tapicerowane. Projekt ma umożliwić

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

Wykład 5. SQL praca z tabelami 2 Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,

Bardziej szczegółowo

NARZĘDZIA WIZUALIZACJI

NARZĘDZIA WIZUALIZACJI Kurs interaktywnej komunikacji wizualnej NARZĘDZIA WIZUALIZACJI Andrzej Łachwa andrzej.lachwa@uj.edu.pl 3 4/8 Zobacz film: http://www.ted.com/talks/david_mccandless_the_beauty_of_dat a_visualization.html

Bardziej szczegółowo

Data modyfikacji: 2013-08-14

Data modyfikacji: 2013-08-14 Data modyfikacji: 2013-08-14 Co zawiera ten dokument: Ten dokument przedstawia, w jaki sposób zainstalować program Kancelaris PLUS 4 za pomocą standardowego instalatora na serwerze MySQL w wersji 5.0 i

Bardziej szczegółowo

QUERY język zapytań do tworzenia raportów w AS/400

QUERY język zapytań do tworzenia raportów w AS/400 QUERY język zapytań do tworzenia raportów w AS/400 Dariusz Bober Katedra Informatyki Politechniki Lubelskiej Streszczenie: W artykule przedstawiony został język QUERY, standardowe narzędzie pracy administratora

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

15. Funkcje i procedury składowane PL/SQL 15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp

Bardziej szczegółowo

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN Integralność danych Wersje języka SQL Klauzula SELECT i JOIN Robert A. Kłopotek r.klopotek@uksw.edu.pl Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW Integralność danych Aspekty integralności

Bardziej szczegółowo

Dokumentacja SQL API 1

Dokumentacja SQL API 1 Dokumentacja SQL API 1 Wprowadzenie... 2 Kody błędów... 3 Tworzenie konfiguracji... 4 Konfiguracja po stronie Klienta... 6 Konfiguracja po stronie SerwerSMS... 8 Archiwizacja danych... 9 2 Wprowadzenie

Bardziej szczegółowo

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000 Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Kursory w SQL Serverze Wprowadzenie Modele kursorów Używanie kursorów Rodzaje kursorów Praca

Bardziej szczegółowo

Projektowanie baz danych za pomocą narzędzi CASE

Projektowanie baz danych za pomocą narzędzi CASE Projektowanie baz danych za pomocą narzędzi CASE Metody tworzenia systemów informatycznych w tym, także rozbudowanych baz danych są komputerowo wspomagane przez narzędzia CASE (ang. Computer Aided Software

Bardziej szczegółowo

Bazy danych i usługi sieciowe

Bazy danych i usługi sieciowe Bazy danych i usługi sieciowe Ćwiczenia I Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) BDiUS ćw. I Jesień 2014 1 / 16 Strona wykładu http://bioexploratorium.pl/wiki/ Bazy_danych_i_usługi_sieciowe_-_2014z

Bardziej szczegółowo

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2. Bazy Danych i Systemy informacyjne Wykład 2 Piotr Syga 16.10.2017 Dodawanie, usuwanie i zmienianie rekordów Wstawianie rekordu wstawianie do tabeli INSERT INTO A VALUES ( fioletowy, okrągły, słodko-kwaśny

Bardziej szczegółowo

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion Autor: Joanna Karwowska SQL zapewnia obsługę: zapytań - wyszukiwanie danych w bazie, operowania danymi - wstawianie, modyfikowanie

Bardziej szczegółowo

Ustalanie dostępu do plików - Windows XP Home/Professional

Ustalanie dostępu do plików - Windows XP Home/Professional Ustalanie dostępu do plików - Windows XP Home/Professional Aby edytować atrybuty dostępu do plikow/ katalogow w systemie plików NTFS wpierw sprawdź czy jest Wyłączone proste udostępnianie czyli przejdź

Bardziej szczegółowo

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Język DML Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Systemy Baz Danych, Hanna Kleban 1 INSERT Instrukcja INSERT dodawanie

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 11 Marcin Młotkowski 19 grudnia 2012 Plan wykładu Modele danych i bazy danych Modele danych Migracje Bazy danych w Railsach Rusztowania Walidacja modeli Modele danych Definicje

Bardziej szczegółowo

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. Temat: Wyzwalacze (triggery). Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie. W poniższym przykładzie definiujemy tablicę a następnie trigger

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

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

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków... Plan wykładu Spis treści 1 Kursory 1 2 Wyjątki 4 2.1 Wyjątki predefiniowane............................. 4 2.2 Wyjątki niezdefiniowane wcześniej....................... 5 2.3 Definiowanie własnych wyjątków........................

Bardziej szczegółowo

SSI Katalog. Program do katalogowania zawartości dysków. Dariusz Kalinowski

SSI Katalog. Program do katalogowania zawartości dysków. Dariusz Kalinowski 1.) Wymagania sprzętowe: SSI Katalog Program do katalogowania zawartości dysków Dariusz Kalinowski - System operacyjny: Windows 2000 lub Windows xp - Procesor minimum Pentium 1Ghz - Pamięć RAM minimum

Bardziej szczegółowo

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC 1 Katedra Optoelektroniki i Systemów Elektronicznych 2 Oprogramowanie Systemów Elektronicznych Zagadnienia: Temat wykładu 1. Interfejs ODBC 2. 3. 3 Interfejs ODBC 4 Interfejs ODBC ODBC (Open DataBase Connectivity)

Bardziej szczegółowo