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