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
20/01/15 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/ 2 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 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,… 3 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 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,…) 4 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 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 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
20/01/15 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 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
20/01/15 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 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
20/01/15 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 PROJECT MANAGEMENT 8 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Wat de klant beschreven heeb Wat de verkoper beloofd heeb 9 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Wat de project manager begrepen heeb Hoe de analist het ontworpen heeb 10 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Hoe de programmeur het geschreven heeb Wat de testers ontvangen hebben 11 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Hoe de sobware gedocumenteerd werd Wat er effecDef geïnstalleerd werd 12 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Wat er aan de klant gefactureerd werd De ondersteuning na verkoop 13 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 Wat de klant eigenlijk nodig had Hoe komt dit? 14 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 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. 15 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 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.  Scope: uw applicaDe moet zoveel mogelijk noden van de klant oplossen. 3.  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. 16 © Vincent De Munck
Opleiding Web Developer 2014-2015
20/01/15 hZp://www.contractonline.be/Database-­‐06/oef_bibliotheek.php OEFENING BIBLIOTHEEK 17 © Vincent De Munck
Herunterladen

MySQL: les 4 Agenda - Cursusmateriaal opleiding web developer