Návrh a tvorba WWW Přednáška 6 PHP II – Databáze.

Slides:



Advertisements
Podobné prezentace
Přístup k databázím z WWW
Advertisements

Databázové systémy 2 Cvičení č. 8
Základy jazyka SQL Jan Tichava
Přednáška č. 1 Úvod, Historie zpracování dat, Základní pojmy
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Fakulta elektrotechniky a informatiky
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Relační databáze Jakub Lokoč.
Radek Špinka Přepínače MSSQL výběr.
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
PHP a MySQL Připojení k databázi:
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Databázové systémy teorie a návrh relačních databázových systémů část II.
Vypracoval: Ondřej Dvorský Třída: VIII.A
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Návrh a tvorba WWW Cvičení 5
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B16 Autor Ing. Jiří Kalousek Období vytvoření březen.
Aplikační a programové vybavení
(Java) RDF APIs Jan Zemánek KIZI VŠE, Praha. Přehled Java RDF APIs Jena Download
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
MySql – úvod MySql je multiplatformní databázový systém (server a klient). Je napsán v C a C++. Ke stažení je na pro různé platformy, ve.
Úvod do PHP IZI 228.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Microsoft SQL server Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Delphi a databáze MS SQL Server.
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: Důvěrnost - informace by neměly.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B15 Autor Ing. Jiří Kalousek Období vytvoření březen.
Vnořené SQL (embedded SQL) Dotazovací jazyky I
Zanořené SQL a dynamické SQL
Dynamické SQL (dynamic SQL)‏ Dotazovací jazyky Šárka Hlušičková.
Databázové systémy Úvod, Základní pojmy. Úvod S rozvojem lidského poznání roste prudce množství informací. Jsou kladeny vysoké požadavky na ukládání,
Databázové systémy přednáška 8 – Transakce
Unix a Internet 9. SQL server
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Databázové systémy a SQL
Databázové systémy a SQL
Šablona 32 VY_32_INOVACE_038.ICT.34
Databázové systémy a SQL
Přednáška 9 Triggery.
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Návrh a tvorba WWW Přednáška 6 PHP II – Databáze

MySQL Výhody široká komunita uživatelů otevřený zdrojový kód rychlost sytému k dispozici pro mnoho platforem Nevýhody nedostatečný výkon při náročných operacích nepodporuje pokročilé databázové techniky Systém dostupný na

MySQL a PHP Rozhraní PHP mysql mysqli

Rozhraní mysqli I. Otevření spojení se serverem MySQL. Argumenty: hostitel uživatelské jméno heslo název databáze port TCP unixový doménový soket Inicializace rozhraní MySQLi. Vrací objekt, jenž bude používán společně s funkcí mysqli_real_connect. mysqli_connect(…) $mysqli = new mysqli(…) mysqli_init(…) $mysqli = new mysqli

Rozhraní mysqli II. Nastavení předvoleb spojení. Otevření spojení se serverem. Uzavření spojení se serverem. Načtení posledního chybového kódu resp. Zprávy vztahující se k neuskutečněnému spojení. mysqli_options(…) $mysqli->options(…) mysqli_close(…) $mysqli->close(…) mysqli_connect_errno() mysqli_connect_error() mysqli_real_connect(…) $mysqli->real_connect(…)

Dotazy Odeslání dotazu na DB server. Argumenty: objekt spojení dotaz režim (s vyrovnávací pamětí, nebo bez ní) Odeslání více dotazů na DB server. Argumenty: objekt spojení dotazy mysqli_query(…) mysqli_multi_query(…) Mysqli->multi_query(…)

Zpracování výsledku Zpracování dotazu a načtení řádku výsledku. Zpracování dotazu a načtení výsledku do asociativního pole. Zpracování dotazu a načtení výsledku do objektu. mysqli_fetch_row() $mysqli->fetch_row() mysqli_fetch_assoc() $mysqli->fetch_assoc() mysqli_fetch_object() $mysqli->fetch_object()

Binding (vázání proměnný) Vázání vstupních proměnných 1.Příprava příkazu 2.Svázání příkazu a vstupních proměnných 3.Přiřazení hodnot proměnným 4.Spuštění příkazu mysqli_prepare(…) $mysqli->prepare() mysqli_stmt_bind_param(…) $stmt->bind_param(…) mysqli_stmt_execute(…) $stmt->execute

Binding (vázání proměnný) Vázání výstupních proměnných 1.Příprava příkazu 2.Spuštění příkazu 3.Svázání příkazu a výstupními proměnnými 4.Načtení dat do výstupních proměnných mysqli_prepare(…) $mysqli->prepare() mysqli_stmt_fetch(…) $stmt->bind_fetch mysqli_stmt_execute(…) $stmt->execute mysqli_stmt_bind_result(…) $stmt->bind_result(…)

SQLite Výhody samostatnost, nezávislost součástí PHP 5 jednoduchost a rychlost procedurální i objektové rozhraní Nevýhody neexistence serverového procesoru soubory nejsou binárně bezpečné transakce zamykají soubory Systém dostupný na

SQLite Otevření spojení k databázi SQLite. Argumenty: název souboru oprávnění (chmod) chybová zpráva Uzavření spojení sqlite_open(…) $sqlite = new SQLiteDatabase(…) sqlite_close(…);

SQLite příklad $dbhandle = sqlite_open('db/test.db', 0666, $error); if (!$dbhandle) die ($error); $query = "SELECT Name, Sex FROM Friends"; $result = sqlite_query($dbhandle, $query); if (!$result) die("Cannot execute query."); $row = sqlite_fetch_array($result, SQLITE_ASSOC); print_r($row); sqlite_rewind($result); $row = sqlite_fetch_array($result, SQLITE_NUM); print_r($row); sqlite_rewind($result); $row = sqlite_fetch_array($result, SQLITE_BOTH); print_r($row); sqlite_close($dbhandle);

PDO PDO je rozšíření PHP (od verze 5.1) umožňující jednotným způsobem komunikovat s různými databázemi. PDO podporuje DBLIB: FreeTDS / Microsoft SQL Server / Sybase Firebird ( Firebird/Interbase 6 IBM (IBM DB2) INFORMIX - IBM Informix Dynamic Server MYSQL ( MySQL 3.x/4.0 OCI ( Oracle Call Interface ODBC: ODBC v3 (IBM DB2 and unixODBC) PGSQL ( PostgreSQL SQLITE ( SQLite 3.x Dostupní na

Příklad PDO Více příkladů např. na PDO.html#4.3 try { $dbh = new PDO("mysql:host='localhost';dbname=mysql", 'username', 'password'); echo 'Spojeno s DB'; $count = $dbh->exec("INSERT INTO people(name, sex) VALUES ('cegan', 'male')"); $sql = "SELECT * FROM people"; foreach ($dbh->query($sql) as $row){ print $row['name'].' - '. $row['sex']. ' '; } $dbh = null; //ukončení spojení } catch(PDOException $e){ echo $e->getMessage(); }

Oracle DB v PHP Podpora databázového stroje Oracle je zajištěna prostřednictvím extenzí: Oracle OCI8 PDO Oracle Instant client ( Účet na DB vám vytvoří cvičící předmětu Databázové systémy 2. The Undeground PHP and Oracle Manual Christopher Jones, Alison Holloway df

Spojení Otevření spojení Uzavření spojení Změna hesla $c=oci_connect($username, $password, $dbname, $charset); oci_close($c); oci_password_change($c, $username, $oldPassword, $newPassword);

Select 1.Rozebrání příkazu (Parse) – parsování dotazu pro vykonání 2.Přiřazení dat (Bind) – přiřazení dat do dotazu pro lepší výkon a bezpečnost 3.Vykonání (Execute) – vykonání dotazu 4.Načtení (Fetch) – vrácení výsledku dotazu z databáze $c = oci_connect("hr", "hrpwd", "localhost/XE"); $s = oci_parse($c, 'select city, postal_code from location'); oci_execute($s); print ' '; while ($row = oci_fetch_array($s, OCI_NUM+OCI_RETURN_NULLS)) { print ' '; foreach ($row as $item) print ' '.htmlentities($item).' '; print ' ‘; } print ' '; oci_free_statement($s);

Zpracování výsledku Funkce načtení oci_fetch_all() – vrátí výsledek najednou oci_fetch_array() – vrátí výsledek v poli oci_fetch_assoc() – vrátí výsledek v asociativním poli oci_fetch_object() – vrátí výsledek jako objekt oci_fetch_row() – vrátí výsledek v indexovaném poli Parametry pro funkci oci_fetch_array() OCI_ASSOC – vrátí výsledek jako asociativní pole OCI_NUM – vrátí výsledek jako číselně indexované pole OCI_BOTH – vrátí výsledek jako indexované i asociativní pole (výchozí hodnota) OCI_RETURN_NULLS – vrátí PHP NULL hodnotu pro NULL data OCI_RETURN_LOBS – vrátí aktuální LOB data místo OCI- LOB zdroje. $rowarray = oci_fetch_array($statement, $mode); $rowarray = oci_fetch_array($s, OCI_NUM + OCI_RETURN_NULLS);

Insert, delete, update, create, drop Pro vykonání Data Definition Language (DDL) and Data Manipulation Language (DML) dotazů, jako například CREATE, INSERT, atd. je nejjednodušší použít příkaz pro parsování SQL dotazu (oci_parse) a jeho následné vykonání (oci_execute). $s = oci_parse($conn, "create table i1test (col1 number)"); oci_execute($s);

Transakce Transakce je logická jednotka zpracování dat, která se skládá z jednoho nebo více SQL příkazů provedených jedním uživatelem. Transakce končí buď úspěšným „commitnutím“, tedy promítnutím změn do databáze, nebo rollbackem, vrácením databáze do původního stavu, resp. neprovedením změn naakumulovaných v průběhu transakce. Funkce související s transakcemi oci_execute($s, OCI_DEFAULT); - bez provedení commitu oci_rollback($c); - vrácení databáze do původního stavu $c = oci_connect('hr', 'hrpwd', 'localhost/XE'); $s = oci_parse($c, "insert into mytable values ('abc')"); oci_execute($s, OCI_DEFAULT); // don't commit $s = oci_parse($c, "begin updatelog('INSERT attempted'); end;"); oci_execute($s, OCI_DEFAULT); // don't commit oci_rollback($c);

Obsluha chyb Obsluha chyb je v knihovně OCI řešena funkcí oci_error(). Funkce vyžaduje různé argumenty závisející na kontextu předešlého volání. Návratová hodnota funkce je pole. Prvky pole vrácen funkcí oci_error(): $e["code"] – číslo chyby$e["offset"] – pozice chyby v SQL dotazu $e["message"] – chybová zpráva$e["sqltext"] – SQL dotaz $c = oci_connect("hr", "not_hrpwd", "localhost/XE"); if (!$c) { $e = oci_error(); // No parameter passed var_dump($e); } $s = oci_parse($c, "select city from locations"); $rc = oci_execute($s); if (!$rc) { $e = oci_error($s); // Statement resource passed var_dump($e); } $rc = oci_fetch_all($s, $results); if (!$rc) { $e = oci_error($s); // Statement resource passed var_dump($e); }

Přiřazení dat Binding je vysoce doporučovaným prostředkem pro cachování dotazu na databázovém serveru a znovupoužití exekučních plánů. Dále nabízí způsob jak chránit dotazy proti SQL injection. $s = oci_parse($c, "select last_name from employees where employee_id = :eidbv"); $myeid = 101; oci_bind_by_name($s, ":eidbv", $myeid); oci_execute($s); $row = oci_fetch_array($s, OCI_ASSOC); echo "Last name is: ". $row['LAST_NAME']." \n";

Omezení počtu řádku výsledku (limit) Oracle nezná klíčové slovo LIMIT a proto je pro omezení počtu řádků výstupu SQL dotazu potřeba použít speciální konstrukci, která prostřednictvím vnořeného selectu toto omezení zprostředkuje. select * from ( select a.*, rownum as rnum from (-- Váš dotaz --) a where rownum <= MAX_ROWS ) where rnum >= MIN_ROWS

Omezení počtu řádku výsledku (limit) Oracle nezná klíčové slovo LIMIT a proto je pro omezení počtu řádků výstupu SQL dotazu potřeba použít speciální konstrukci, která prostřednictvím vnořeného selectu toto omezení zprostředkuje. select * from ( select a.*, rownum as rnum from (-- Váš dotaz --) a where rownum <= MAX_ROWS ) where rnum >= MIN_ROWS

Auto-increment Autoinkrementování hodnoty sloupečku tabulky je v prostředí Oracle realizováno prostřednictvím sequence a trigeru. Vytvoření sequence a trigeru Příklad konkrétního použití při konstrukci dotazu acreate sequence myseq; create trigger mytrigger before insert on mytable for each row begin select myseq.nextval into :new.myid from dual; end; $s = oci_parse($c, "insert into mytable (mydata) values ('Hello')"); oci_execute($s);

Získání posledního vloženého ID OCI8 nemá žádnou explicitní funkci “insert_id”, která by vracela poslední vložené ID. Místo toho lze použít RETURN INTO. Obdobně pomocí descriptoru $s = oci_parse($c, "insert into mytable (mydata) values ('Hello') return myid into :id"); oci_bind_by_name($s, ":id", $id, 20, SQLT_INT); oci_execute($s); echo "Data inserted with id: $id\n"; $rid = oci_new_descriptor($c, OCI_D_ROWID); $s = oci_parse($c, "insert into mytable (mydata) values ('Hello') return rowid into :rid"); oci_bind_by_name($s, ":rid", $rid, -1, OCI_B_ROWID); oci_execute($s);