PDO

Слични документи
PHP proširenja za rad sa bazama podataka Postoje pojedinačna proširenja za različite tipove baza podataka sa svojim bibliotekama funkcija npr. postoji

Baza podataka

PowerPoint Presentation

Microsoft PowerPoint - 6. Query Builder.pptx

Uvod u PHP

Microsoft Word - MySQL_3.doc

Microsoft Word - WP_kolokvij_2_rjesenja.doc

Primenjeno programiranje - Vežbe

Slide 1

Microsoft Word - SYLLABUS -Dinamicki

NIAS Projekt e-građani KORISNIČKA UPUTA za aplikaciju NIAS Verzija 1.1 Zagreb, srpanj 2014.

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

CLI

Slide 1

Upitni jezik SQL

PuTTY CERT.hr-PUBDOC

Fakultet tehničkih nauka, Novi Sad Predmet: ISIBP

Introduction to Programming

Fra Serafina Schoena Rijeka MB: MBO: Žiro račun: kod RBA d.d. GSM:

SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ELEKTROTEHNIČKI FAKULTET Sveučilišni studij KOMUNIKACIJA KLIJENATA U DISTRIBUIRANOJ JAVA APLIKACIJI Di

PHP kod

DWA2

Tutoring System for Distance Learning of Java Programming Language

Upute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa

Introduction to Programming

UPITI NAD JEDNOM TABELOM 1. Izdvojiti šifre svih knjiga select K_SIF from K 2. Izdvojiti šifre knjiga iz tabele K uz imenovanje kolone select K_SIF as

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

QlikView Training

Microsoft PowerPoint - Topic02 - Serbian.ppt

Baze podataka MySQL Community Server i MySQL Workbench

Microsoft PowerPoint - Topic02 - Serbian.ppt

Introduction to Programming

12 Stanje

Introduction to Programming

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

(Microsoft PowerPoint - 903_\216nidari\346_Java Persistence.pptx)

VMC_upute_MacOS

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

NAPOMENA: Studenti na ispit donose kod urađenog zadatka

(Microsoft PowerPoint - 412_Buni\346 HTV.ppt [Compatibility Mode])

OpenVPN GUI CERT.hr-PUBDOC

Web programiranje i primjene - Osnovni pojmovi WEB tehnologije korišteni u kolegiju

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

CARNET Helpdesk - Podrška obrazovnom sustavu e-dnevnik upute za nadzor razrednih knjiga tel: fax: mail:

PowerPoint Presentation

Ministarstvo poljoprivrede Portal gospodarskog ribarstva Registracija prvih kupaca Uputa za korisnike

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Kako preziveti katastrofu

Primenjeno programiranje - vezbe GUI i baze podataka

Računarski praktikum I - Vježbe 09 - this, static

8 2 upiti_izvjesca.indd

Sveucilište u Zagrebu

PDF = Potencijalno destruktivan fajl

PowerPointova prezentacija

P11.3 Analiza zivotnog veka, Graf smetnji

Računarski praktikum II - Predavanje 02 - HTML forme. Git.

Maksimalni protok kroz mrežu - Ford-Fulkerson, Edmonds-Karp

Sadržaj Wi-Fi MESHtar...4 Upute za povezivanje osnovnog paketa od dva uređaja...6 Savjeti i napredne postavke A) Preporuke za optimalno postavljanje u

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

SVEUČILIŠTE U RIJECI TEHNIČKI FAKULTET Preddiplomski sveučilišni studij računarstva Završni rad WEB APLIKACIJA ZA PREZENTACIJU I REZERVACIJE TURISTIČK

KONFIGURACIJA MODEMA THOMPSON SpeedTouch 500 Series (530/530i/510/510i)

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA Sveučilišni studij WEB APLIKACIJA ZA

Tutoring System for Distance Learning of Java Programming Language

Merlin: Priručnik za institucijske administratore Srce Centar za e-učenje (CEU) Sadržaj: 1. Otvaranje novog e-kolegija Otvaranje više e-kole

PROCES KUPNJE ULAZNICE NA PORTALU ULAZNICE.HR Početak kupovine... 2 Plaćanje Mastercard karticom... 5 Plaćanje Maestro karticom... 8 Plaćanje American

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

MEĐIMURSKO VELEUČILIŠTE ČAKOVEC RAČUNALSTVO PATRIK MIHOCI Izrada modela za objektno relacijsko povezivanje podataka u okviru aplikacije za opis predme

Microsoft PowerPoint - 6. CMS [Compatibility Mode]

kriteriji ocjenjivanja - informatika 8

KORISNIČKE UPUTE APLIKACIJA ZA POTPIS DATOTEKA

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

СТАРТ - СТОП ПАРКИНГ СИСТЕМ КОРИСНИЧКО УПУТСТВО страна 1 од 12

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Uvod u računarstvo 2+2

01 SUBP

JAВА ПРОГРАМИРАЊЕ Сврха обуке за Јава програмирање је стицање знања и вештина у области Јава програмирања са циљем повећања броја квалификованих ИТ ст

IEP - Projekat 2018/2019

Smjernice za korištenje sustava online prijava Ukoliko imate pristupno korisničko ime i lozinku ili ste navedeno dobili nakon zahtjeva za otvaranje no

SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ž D I N Leo Siniša Radošić Modreni upravitelj zaporkama ZAVRŠNI RAD Varaždin,

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1.

R u z v e l t o v a 5 5, B e o g r a d, t e l : ( ) , m a i l : c o n t a c p s i t. r s, w w w. p s i t. r s

CPHP_19

Uvod u Python

MultiBoot Korisnički priručnik

Prezentator: Nataša Dvoršak Umag, 20.listopad 2006

INTEGRIRANI KNJIŽNIČNI SUSTAV Sustav za podršku Upute za instalaciju: Aleph v22 ZAG

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

Document ID / Revision : 0419/1.1 ID Issuer Sustav (sustav izdavatelja identifikacijskih oznaka) Upute za registraciju gospodarskih subjekata

PowerPoint Presentation

Pojačavači

Računarski praktikum I - Vježbe 11 - Funktori

03 SUBP

8 LINQ upiti LINQ (Language Integrated Query upit integrisan u jezik) jeste skup mogućnosti koje jezik C# i Framework pružaju za pisanje strukturirani

PowerPoint Presentation

Opticum HD - Uputstvo za skeniranje kanala.docx

ARHITEKTURA I ORGANIZACIJA RAČUNARA

Kombinatorno testiranje

Транскрипт:

PDO Marijan Šuflaj FER, 2018

Sadržaj PDO Osnove Izvršavanje upita Ranjivosti Dohvaćanje rezultata upita

PDO - PHP Data Objects Jednostavno i konzistetno sučelje za pristup bazama podataka iz PHP-a Isti se kod može spajati na više različitih baza podataka Objektno orjentirani pristup Možemo naslijediti razrede i implementirati Dva bitna razreda PDO PDOStatement

Razred PDO Razred predstavlja konekciju prema poslužitelju Instanciranjem se razreda odmah uspostavlja veza Parametri se konekcije prosljeduju kao DSN (Database source name) niz znakova mysql:dbname=ime-baze;host=host;charset=utf8 Kroz konstruktor se prosljeduju korisničko ime i lozinka Moguće je proslijediti i atribute radi promjene pretpostavljenih ponašanja razreda Promjena načina dojave grešaka na iznimke secure.php.net/manual/en/class.pdo.php

Spajanje na poslužitelj try { $dsn = 'mysql:dbname=oipa-predavanja;'. 'host=oipa-db;charset=utf8'; $db = new PDO( $dsn, 'root', 'oipa-password', [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ] ); } catch (PDOException $e) { throw $e; }

Zadatak 1 Povucite novu Docker sliku pomoću docker pull oipa/backend:2.0 Rekreirajte kontejner web-poslužitelja Ostvarite uspješnu konekciju na lokalnu bazu podataka koju koristite na predavanjima

Razred PDOStatement Predstavlja pripremljeni upit kao i rezultat izvršavanja tog upita Implementira sučelje Traversable pa se objekt može koristiti unutar foreach Rezultati iteracije ovise o načinu dohvaćanja rezultata Postavili smo kod stvaranja konekcije (PDO::ATTR DEFAULT FETCH MODE) Pruža siguran način izvršavanja upita Ne ubacujemo parametre izravno u upit već naznačujemo mjesta gdje će ti parametri biti ubačeni secure.php.net/manual/en/class.pdostatement.php

Dohvaćanje zapisa iz baze $sql = 'SELECT id, ime FROM kategorija'; $stmt = $db->query($sql); var_dump($stmt->rowcount()); foreach ($stmt as $row) { var_dump($row); }

Parametrizirano dohvaćanje zapisa iz baze $id = $_GET['id']?? 0; $sql = <<<"SQL" SELECT id, ime FROM kategorija WHERE id = $id SQL; $stmt = $db->query($sql); var_dump($stmt->rowcount()); foreach ($stmt as $row) { var_dump($row); } Problemi?

Ranjivost na ubacivanje SQL koda Nezaštićeni su parametri ranjivi na izvršavanje proizvoljnog SQL koda Potrebno je osigurati sigurne vrijednosti parametara $id = $db->quote( $_GET['id']?? '0', PDO::PARAM_INT ); en.wikipedia.org/wiki/sql injection

Ranjivost na ubacivanje SQL koda - nastavak

Zadatak 2 Napravite stranicu za izlist svih kategorija Svaka kategorija neka bude poveznica na stranicu koja će ispisati članke unutar te kategorije sortirane po imenu

Pripremljeni upiti Dovoljan je jedan nezaštićeni parametar za ranjivost PDO nudi mogućnost pripremljenih upita gdje su parametri zamjenjeni rezerviranim mjestima Označava se pomoću? Konkretne se vrijednosti zadaju kasnije U slučaju da poslužitelj baze ne podržava pripremljene upite, PHP ih emulira $sql = <<<'SQL' SELECT id, ime FROM kategorija WHERE id =? SQL; $stmt = $db->prepare($sql); $stmt->execute([$_get['id']?? 0]); foreach ($stmt as $row) { var_dump($row); }

Pripremljeni upiti - imenovani parametri Parametri mogu biti i imenovani Isti je pripremljeni upit moguće više puta izvršiti $sql = <<<'SQL' INSERT INTO kategorija (ime) VALUE (:ime) SQL; $stmt = $db->prepare($sql); foreach (['JavaScript', 'Java'] as $ime) { $stmt->execute([':ime' => $ime]); }

Pripremljeni upiti - nastavak Metoda debugdumpparams nudi pomoć prilikom otklanjanja grešaka Ispisuje trenutne informacije o odredenom upitu $sql = <<<'SQL' SELECT id, ime FROM SQL; kategorija WHERE id = :id $stmt = $db->prepare($sql); $stmt->execute([':id' => 541]); $stmt->debugdumpparams();

Pripremljeni upiti - povezivanje parametara Jednostavnije izvršavanje upita Posebice kod parcijalnih skupova podataka Veća kontrola nad tipovima parametara Dvije metode u razredu PDOStatement bindvalue($stupac, $vrijednost - parametru pridjeljuje vrijednost bindparam($stupac, &$vrijednost - parametru pridjeljuje referencu na varijablu Koristi se vrijednost pohranjena u varijabli u trenutku izvršavanja upita Metodu execute potrebno pozvati bez parametara Neimenovani se parametri broje od jedan, a ne nula

Pripremljeni upiti - metoda bindvalue $sql = <<<'SQL' SELECT id, ime FROM kategorija WHERE id =? SQL; $stmt = $db->prepare($sql); $stmt->bindvalue( 1, $_GET['id']?? 0, PDO::PARAM_INT ); $stmt->execute(); foreach ($stmt as $row) { var_dump($row); }

Pripremljeni upiti - metoda bindparam $sql = <<<'SQL' SELECT id, ime FROM kategorija WHERE id = :id SQL; $stmt = $db->prepare($sql); $stmt->bindparam( ':id', $id, PDO::PARAM_INT ); foreach ([1, 3] as $id) { $stmt->execute(); } foreach ($stmt as $row) { var_dump($row); }

Pripremljeni upiti - opaska kod tipova podataka Tip podatka je bitan u odredenim situacijama Pretpostavljeno se vrijednost priprema kao niz znakova $sql = <<<'SQL' SELECT id, ime FROM kategorija LIMIT :id SQL; $stmt = $db->prepare($sql); $stmt->bindvalue(':id', 2, PDO::PARAM_INT); $stmt->execute(); foreach ($stmt as $row) { var_dump($row); }

Dohvaćanje rezultata - promjena načina dohvaćanja Moguće je za odredeni pripremljeni upit promjeniti način dohvaćanja rezultata $sql = 'SELECT id, ime FROM kategorija'; $stmt = $db->query($sql); $stmt->setfetchmode(pdo::fetch_obj); foreach ($stmt as $row) { var_dump($row); } PHP pretpostavlja vrijednost PDO::FETCH BOTH

Dohvaćanje rezultata - ručno dohvaćanje Iteriranje pomoću petlje foreach predstavlja jedan od načina dohvaćanja podataka Moguće je koristiti metode fetch*() za preciznije dohvaćanje rezultata $sql = 'SELECT id, ime FROM kategorija'; $stmt = $db->query($sql); while (false!== ($red = $stmt->fetch())) { var_dump($red); }

Dohvaćanje rezultata - povezivanje parametara Moguće je povezati kolone rezultata s varijablama preko referenci Analogno metodi bindparam za povezivanje parametara Način dohvaćanja mora biti PDO::FETCH BOUND $sql = 'SELECT id, ime FROM kategorija'; $stmt = $db->query($sql); $stmt->setfetchmode(pdo::fetch_bound); $stmt->bindcolumn('id', $id); $stmt->bindcolumn(2, $ime); foreach ($stmt as $row) { var_dump($id, $ime); }

Oslobadanje resursa upita Eksplicitno oslobadanje resursa upita Neke implementacije ne podržavaju izvršavanje novih upita bez da su svi redovi trenutnog upita dohvaćeni MySQL implementacija implicitno oslobada resurse Pomoću metode closecursor() $stmt = $db->prepare( 'SELECT id, ime FROM ); kategorija' $stmt->execute(); $stmt->closecursor(); $stmt->execute(); foreach ($stmt as $row) { var_dump($row); }

Zadatak 3 Pružite mogućnost dodavanja i uredivanja kategorija i članaka Za kategorije omogućite promjenu imenja postojećih kao i dodavanje novih kategorija Za članke omogućite promjenu naslova, sadržaja članka i kategorije u kojoj se nalazi, kao i dodavanje novih članaka Želite li omogućiti unos svih polja? Odabir kategorije neka bude padajući izbornik

Zatvarnje konekcije na poslužitelj Ne postoji eksplicitna metoda za zatvaranje Konekcija je aktivna za vrijeme postojanja objekta koji predstavlja konekciju Uništavanjem se objekta prekida i konekcija A to radimo kako? Na kraju skripte, izvodač će zatvoriti sve otvorene konekcije To nas, naravno, ne sprečava da čistimo iza sebe čim znamo da nam nešto ne treba :) Postoje i perzistentne konekcije Ne zatvaraju na kraju skripte PDO::ATTR PERSISTENT => true prilikom stvaranja konekcije