Transcript MySQL: les 4 Agenda - Cursusmateriaal opleiding web developer
Opleiding Web Developer 2014-2015 20/01/15
MySQL: les 4
Project bibliotheek • • • • • •
Agenda
Verbinden vanuit PHP SQL injecDes MySQL FuncDons "Project management" Oefening bibliotheek Planning resterende lessen Database 1 © Vincent De Munck
Opleiding Web Developer 2014-2015
Queries uitvoeren vanuit PHP
• Oude methode: mysql() à NIET GEBRUIKEN! Voor wie deze library reeds gewoon is: hZp://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers • 2 nieuwe, betere methodes: mysqli() • Voordeel: object-‐georienteerd of procedureel – PDO() • Voordeel: werkt met 12 verschillende merken databases • Voordeel: named parameters in prepared statements! Voorbeelden: zie map Database 03 • • •
Nuage links
hZp://net.tutsplus.com/tutorials/php/pdo-‐vs-‐ mysqli-‐which-‐should-‐you-‐use/ hZp://net.tutsplus.com/tutorials/php/php-‐ database-‐access-‐are-‐you-‐doing-‐it-‐correctly/ hZp://net.tutsplus.com/tutorials/php/why-‐you-‐ should-‐be-‐using-‐phps-‐pdo-‐for-‐database-‐access/ 20/01/15 2 © Vincent De Munck
Opleiding Web Developer 2014-2015
Veiligheid: voorkom SQL injecDes!
Voorbeeld: u heeb een blog en laat via de navigaDe een bericht ophalen via het ID nr in een GET variabele. Deze GET variabele moet dus gebruikt worden in uw query. $query = ' SELECT Dtel, tekst FROM posts WHERE id = ' . $_GET['post'] . ' AND acDef = 1; ' Wat als iemand volgende ID opgeeb? $_GET['post'] = ' 1; DROP posts; ' à
UW TABEL WORDT VERWIJDERD!!!
De oplossing? Prepared statements & parameter binding! • • • •
MySQL FuncDes
Waardes transformeren Kan meestal ook in PHP, maar vaak sneller in de database Vaak gebruikt om de waarde van een kolom te veranderen bij een SELECT Maar kan ook gebruikt worden in WHERE, HAVING, GROUP BY, ORDER BY, UPDATE,… 20/01/15 3 © Vincent De Munck
Opleiding Web Developer 2014-2015 • • • • • •
Aggregate funcDons
MIN() : laagste waarde in kolom MAX(): hoogste waarde in kolom AVG(): gemiddelde van kolom SUM(): som van kolom COUNT(kolomnaam): aantal rijen in kolom COUNT(DISTINCT kolomnaam): unieke rijen in kolom hZp://dev.mysql.com/doc/refman/5.0/en/group-‐ by-‐funcDons.html
• •
String funcDons: concatenaDon
CONCAT(deel1, deel2, deel3, deel4, …)
à à lijmt de delen aan elkaar tot één string. Bvb: CONCAT(voornaam, ' ', achternaam) Geeb null indien een van de delen null is.
CONCAT_WS(scheidingswaarde, deel1, deel2,…)
à à lijmt de delen aan elkaar met de scheidingswaarde ertussen negeert delen die null zijn à goed alternaDef voor CONCAT() indien u weet dat een kolom null kan zijn.Als scheidingswaarde geeb u dan een lege string mee: CONCAT_WS('', kolom1, kolom2,…) 20/01/15 4 © Vincent De Munck
Opleiding Web Developer 2014-2015 • • • • • •
Andere string funcDons
LOWER(): kleine leZers UPPER(): hoofdleZers TRIM(): spaDe aan begin/einde wegnemen (zie ook LTRIM() en RTRIM() voor links/rechts) LIKE: gelijkaardige string. Bvb: SELECT * FROM tbl WHERE naam LIKE 'Vande%' LENGTH(): lengte van string hZp://dev.mysql.com/doc/refman/5.0/en/ string-‐funcDons.html
20/01/15 • •
Numerieke funcDes
Zowat alle wiskundige bewerkingen. Zie online handleiding: hZp://dev.mysql.com/doc/refman/5.0/en/ numeric-‐funcDons.html
5 © Vincent De Munck
Opleiding Web Developer 2014-2015 • • •
TijdsfuncDes
DATE(): dateDme naar datum omzeZen DAY(), MONTH(), YEAR(),…: deel van datum DATEDIFF(): verschil tussen twee data • Zie online handleiding: hZp://dev.mysql.com/doc/refman/5.0/en/date-‐ and-‐Dme-‐funcDons.html
20/01/15
EncrypDe/DecrypDe
•
• •
AES_ENCRYPT(brontekst, sleutel)
à alDjd ander resultaat! •
AES_DECRTYPT(versleutelde-‐tekst, sleutel)
MD5(brontekst): MD5 hash van brontekst SHA1(brontekst): SHA-‐1 hash van brontekst 6 © Vincent De Munck
Opleiding Web Developer 2014-2015
Allerlei
• • RAND(): willekeurig getal tussen 0 en 1 Veel voorbeelden met ORDER BY RAND()
à is ok indien u echt de hele lijst in willekeurige volgorde wil krijgen à niet efficiënt als u één willekeurig item wil en LIMIT 1 doet In dit geval, beter dit voorbeeld volgen: hZp://forums.phpfreaks.com/topic/36709-‐the-‐ mysql-‐sDcky/#entry178450 20/01/15 • • •
Control funcDons
IF(expressie, resultaat-‐juist, resultaat-‐onjuist) CASE waarde WHEN vergelijkings-‐waarde THEN resultaat-‐juist ELSE resultaat-‐fout END
hZp://dev.mysql.com/doc/refman/5.0/en/ control-‐flow-‐funcDons.html
7 © Vincent De Munck
Opleiding Web Developer 2014-2015 • • •
Online resources
MySQL handleiding hZp://dev.mysql.com/doc/refman/5.0/en/ funcDons.html
Overzicht Tutorialspoint: hZp://www.tutorialspoint.com/mysql/mysql-‐ useful-‐funcDons.htm
Enkele Dps hZp://www.bigdbahead.com/?p=46 20/01/15
PROJECT MANAGEMENT
© Vincent De Munck 8
Opleiding Web Developer 2014-2015
Wat de klant beschreven heeb
20/01/15
Wat de verkoper beloofd heeb
© Vincent De Munck 9
Opleiding Web Developer 2014-2015 Wat de project manager begrepen heeb 20/01/15
Hoe de analist het ontworpen heeb
© Vincent De Munck 10
Opleiding Web Developer 2014-2015 Hoe de programmeur het geschreven heeb 20/01/15
Wat de testers ontvangen hebben
© Vincent De Munck 11
Opleiding Web Developer 2014-2015 Hoe de sobware gedocumenteerd werd 20/01/15
Wat er effecDef geïnstalleerd werd
© Vincent De Munck 12
Opleiding Web Developer 2014-2015
Wat er aan de klant gefactureerd werd
20/01/15
De ondersteuning na verkoop
© Vincent De Munck 13
Opleiding Web Developer 2014-2015
Wat de klant eigenlijk nodig had
20/01/15
Hoe komt dit?
© Vincent De Munck 14
Opleiding Web Developer 2014-2015 • • • • •
Goede raad (1)
Sobwareprojecten eindigen vaak in frustraDe door complexiteit en inherente spanning tussen wat commercieel en technische haalbaar is Technisch werk wordt al0jd overschat (ook door u) CommunicaDe is essenMeel: – VerwachDngen realisDsch houden en afstemmen! – Begrijpen wat de klant echt nodig heeQ (is niet noodzakelijk wat de klant zelf bedacht heeb) KISS (keep it simple, stupid): liever een eenvoudig maar nuag dan complex en warrig Denk niet enkel funcDoneel (wat moet het kunnen) maar ook procesmaMg (hoe zou men het gebruiken) • • • •
Goede raad (2)
"Bezint eer ge begint": denk niet meteen aan varchars en colla0ons. Neem de Djd om uw klant te begrijpen en na te denken over uw ontwerp. …maar blijf niet eeuwig hangen in de analyse! Denk bewust na over de beperkingen van uw ontwerp, en communiceer deze duidelijk. Een goede leidraad: cost/benefit. MoDveer uw keuzes qua kwaliteit, scope, toekomstbestendigheid en eleganDe op basis van het relaDeve nut dat zij bieden versus de kost die zij met zich meebrengen. 20/01/15 15 © Vincent De Munck
Opleiding Web Developer 2014-2015
EvaluaDecriteria oefening en examen
In volgorde van belangrijkheid:
1.
Kwaliteit: uw ontwerp moet tot een veilige, betrouwbare en nuage applicaDe leiden. Problemen oplossen; geen nieuwe creëren!
2.
3.
Scope: uw applicaDe moet zoveel mogelijk noden van de klant oplossen. Toekomstbestendigheid: rekening houden met noden die (nog) niet in de scope passen.
4.
Eenvoud en eleganMe: een helder ontwerp dat efficiënt gebruikmaakt van alle resources (programmeerDjd, computercapaciteit,…). • • • • • •
Oefening Bibliotheek
Database 06 à Bibliotheek Zelfstandig of in groep (max 3 personen) Ontwikkelen: za 11 januari en za 18 januari. Deadline: za 25 januari – Indienen is niet verplicht, maar sterk aangeraden – Deliverables: datamodel met demo-‐data, enkele SQL queries en een beschrijving van uw ontwerp – U kiest: presentaDe, one-‐on-‐one of louter per e-‐mail Individuele feedback: 1 februari Examen: 8 februari, vergelijkbare oefening maar veel beperkter in omvang. 20/01/15 16 © Vincent De Munck
Opleiding Web Developer 2014-2015 20/01/15 hZp://www.contractonline.be/Database-‐06/oef_bibliotheek.php
OEFENING BIBLIOTHEEK
© Vincent De Munck 17