140 likes | 246 Views
Webprogrammering. SQL og databaser del 2. I dag. Objektorienterte databasekoblinger Struktur på objektorientering Mange er usikre på det i oblig 1 Kodegjennomgang Oppgaveløsning. MySql-i Objektbasert. MySql – improved , kom i php versjon 5
E N D
Webprogrammering SQL og databaser del 2
I dag • Objektorienterte databasekoblinger • Struktur på objektorientering • Mange er usikre på det i oblig1 • Kodegjennomgang • Oppgaveløsning
MySql-i Objektbasert • MySql – improved, kom i php versjon 5 • Et alternativ til mysqlfunsksjonene som vist sist • Helt tilsvarende, men kall til metoder i et objekt istedenfor funksjoner • Fungerer på Cube og lokalt dersom standard XAMPP lastes. Dersom det ikke fungerer lokalt er det en dll i php.ini som må aktiveres (php_myslqi.dll el.)
MySQLi (uten feilhåndtering) Database <?php $db=newmysqli("localhost","root","","Test"); $sql = "SelectFornavn,Etternavn from ansatt"; $resultat=$db->query($sql); $antallRader = $db->affected_rows; for ($i=0;$i<$antallRader;$i++) { $radObjekt=$resultat->fetch_object(); echo $radObjekt->Etternavn." ".$radObjekt->Fornavn."<br/>”; } ?>
$db=newmysqli("localhost","root","","Test"); if($db->connect_error) { die(”Kunne ikke koble til db : ".$db->connect_error); } $sql = "SelectFornavn,Etternavn from ansatt"; $resultat=$db->query($sql); if(!$resultat) { echo "Error".$db->error."<br/>"; } else { $antallRader = $db->affected_rows; for ($i=0;$i<$antallRader;$i++) { $radObjekt=$resultat->fetch_object(); echo $radObjekt->Etternavn." ".$radObjekt->Fornavn."<br/>"; } } MySQLi med feil-håndtering
$db=newmysqli("localhost","root","","Test"); if($db->connect_error) { die(” Kunne ikke koble til db : ".$db->connect_error); } $sql = "InsertInto ansatt (Fornavn, Etternavn) Values ('Per','Pettersen')"; $resultat=$db->query($sql); if(!$resultat) { echo "Error".$db->error; } else { $antallRader = $db->affected_rows; if($antallRader==0) { echo "Kunne ikke sette inn dataene i databasen!"; } } Insert med MySQLi
Struktur på objektorientering • Mange er usikre på hvordan løse oblig1 objektorientert. • Hvor skal de ulike kodebitene ligge • Vil se på et eksempel og vise ulike måter å løse objektorientering på • Ser også hvordan integrere databaser i denne strukturen.
Eksempel • Problem: En løsning hvor kunder kan bestille billetter (tilsvarende oblig1) • Først finne ut hvilke klasser vi skal lage • Klasser skal være noe konkret • I dette tilfelle er da kunde og billett et godt forslag til klasser for denne løsningen
Klasser • Billett Kunde • Attributter • Attributter • Metoder • Metoder
Klasser og databasetabeller • Ofte er det en tabell i databasen til hver av klassene (i dette tilfelle kunde og billett) • Billett Kunde • Navn • Adresse • Postnr • Poststed • Type • Dato • Sted Kunde Billett • IDNavn • Navn • Adresse • Postnr • Poststed • IDBillett • Type • Dato • Sted • get_type (); • set_type($type); • …. • get_navn(); • set_navn($navn); • ….
Klasser og databasetabeller • Ved normalisering(optimalisering) av databasen blir det ikke en tabell til en klasse • Billett Kunde • Navn • Adresse • Poststed • Postnr • Type • Dato • Sted Kunde Poststed Billett • IDNavn • Navn • Adresse • Postnr • Postnr • Poststed • IDBillett • Type • Dato • Sted • get_Type (); • Set_type($type); • …. • get_Navn(); • set_navn($navn); • ….
Hvilke metoder i klassene? • Get, set metoder for alle attributter • Validering av alle felt • Databaseoperasjoner • All funksjonalitet som tilhører klassen • Andre egne klasser kan vurderes som • Skrive / leste fil • Sende e-post
Egne db-klasser • Kan legge databasemetodene i egne klasser • Bra ved store systemer (lagdeling) • Billett Kunde KundeDB • BillettDB • Navn • Adresse • Poststed • Postnr • Type • Dato • Sted • vis_alle_kunder(); • lagre_kunde (..); • slett_kunde (..); • oppdater_kunde(..) • vis_alle_billetter (); • lagre_billett (..); • slett_billett (..); • oppdater_billett(..) • get_Type (); • Set_type($type); • valider_type($type) • …. • get_navn(); • set_navn($navn); • valider_navn($navn); • …..
Oppsummert • Klasser mot tabeller i databasen • Attributter mot kolonner i tabellene • Mest mulig funksjonalitet knyttet til klassen som metoder inkludert validering • Evt. en databaseklasse pr. vanlig klasse • Så lite som mulig av kode utenfor klasser • Håndtering av skjemaer, legge inn verdier må ligge utenfor klasser.