Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Relaterede dokumenter
Databaseadgang fra Java

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB.

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

HTML, PHP, SQL, webserver, hvad er hvad??

SQL for MySQL-begyndere

En Kort Introduktion til Oracle

The Design Diaries PHP projekt

Eksempel på en database: studenter, kurser, eksamener

Opret ODBC datakilde Vejledning

PHP Crash course. Databaser

GeoGIS2020. Installation. Udkast. Revision: 1 Udarbejdet af: BrS Dato: Kontrolleret af: Status: Løbende Reference: Godkendt af:

Database for udviklere. Jan Lund Madsen PBS10107

Umbraco installationsvejledning

Design Diaries.

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Reeksamen, DSDS, forår 2008

Sådan installeres og teste WordPress på en lokal server

EasyIQ Opdatering > 5.4.0

Ruko SmartAir. Updater installation

Loginsystem (med MySQL)

DRFLive - dynamisk visning af resultater fra DRF Stævnesystem

UPLOAD. Af Database og Website til Skolens Server

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Conventus og SFGIF Hvordan opretter jeg en ny træner?

Eksamen, DSDS, efterår 2007

Opdatering af ISOWARE til version 6.1.0

Installation af Wordpress

ISOWARE release note

PROJEKT 3. The Design Diaries. LINK TIL BLOG: Af Mikkel Borg Svendsen & Sebastian Frank MUL B

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

Karens lille vejledning til Access

Eksamen, DSDS, efterår 2008

Opsætning af MobilePBX med Kalenderdatabase

Ratingsystem i PHP og MySQL

Begrynder til at lave log ind system

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

En blog med dansk brugerflade. Opret en Smartlog konto Gå til Opret en konto ved at skrive din adresse

Worflow plugin til Dynamics CRM

Dynamisk hjemmeside: NeuTravel

MODERNISERINGSSTYRELSEN ØSLDV WINDOWS SERVICE DOKUMENTATION, INSTALLATION OG KONFIGURERING AF ØSLDV/RAY WINDOWSSERVICE

Interaktionsudvikling

Dokumentering af umbraco artikeleksport:

The Design Diaries. Link til blog

Opdatering af ISOWARE til version 8.0.0

DATABASE - MIN MUSIKSAMLING

DMX styring med USB-interface

A11: Last Year s Exam

GEOGIS UDVEKSLING AF DATA MELLEM REGIONER OG RÅDGIVERE. Beregnet for GeoGIS Brugere. Dokument type Brugervejledning.

Jørgen Koch. Access. Opgavehæfte

Vejledning til prækvalifikation. Rev.: / LW. Side 1

Dynamisk PHP design OPDATERET

Eksamens rapport Informationsteknologi B

Vejledning til brugerforvalter. EDI systemet

The Design Diaries Project 3 2. Semester. Blog om designprincipper

Import af rekursivt (parent-child) hierarki i Palo

Online status. Brugervejledning

ØKONOMISTYRELSEN ØSLDV WINDOWS SERVICE DOKUMENTATION INSTALLATION OG KONFIGURERING AF ØSLDV/RAY WINDOWSSERVICE

Formular modul. Sitecore Foundry juli Version 1.0

Introduktion. Unifaun Online

Rigtig SQL Programmering

MANUAL. Siteloom CMS

FORCE Inspect Online Manual v FORCE Inspect Online Manual. 1 af 18

Quick Guide for Mobil Reception (Omhandler mobil reception også kaldet isymphony)

PHP Quick Teknisk Ordbog

WinDCCD Brugervejledning. Indhold. Adgangskontrol...2

Document Portal 1. Document Portal

Dokumentation. Udbyder : sms1919.dk Service : sms-grupper Applikationer Facebook. : Facebook Integration med sms-grupper.

Vejledning til brugeradministrator. EDI systemet

NN Markedsdata. Til. Microsoft Dynamics CRM 2011 Installations guide

3) Først og fremmest kan du vælge hvilket tema din side skal have.

Data lagring. 2. iteration (implement backend)

Tagwall med Php & MySQL

Installation af WeroShop 2.4 S

My booking. Generelt. Forsiden. Version 9.0

Installation af MySQL server på PC

OPC Access 3.0 opdatering via Stored Procedure

Hack of the Month opgave 2

Funktions opdatering ASPECT4 QueryManager (B=fejl, S=support/Info, T=Opgave, W=Releaseønske)

WordPress manual..hjerteforeningen.dk/wp-admin. Brugernavn: Password:

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Eksamen, DSDS, forår 2009

Installation af WeroShop 2.8

Kapitel 4 Løkker i C#

NT PDC Udarbejdet af Kenneth Dalbjerg

Quick Guide. Version 0.9

DB undervisning 01-01

Sådan indlægges nyheder på DSqF s hjemmeside trin for trin

Sådan anvendes databaseskabelonen

Download, installation og ibrugtagning af CQ

Vejledning. Opsætning af Trio Web Vers 2.0 feb. 2010

Eksamen, DSDS, forår 2008

My Event. Funktioner, en oversigt: Kom i gang: Online tilmeldings system.

RUT-ruteplanlægningsvejledning. Brugervejledning Folkekirkens Nødhjælp Sogneindsamling

Guide til oprettelse og håndtering af incidents via ServiceDeskportalen hos EG Data Inform A/S

Transkript:

Mysqli Webintegrator Når vi arbejder med server-side scripting ( i vort tilfælde PHP), har vi ofte behov for at kunne tilgå data, som vi opbevarer i en database. Det kan f.eks. dreje sig om nyhederne i vores online-avis, priser og varebeskrivelser i vores webshop, indlæg på vores blog eller alt muligt andet. Til at opbevare disse data kan vi benytte os af diverse database administrationsværktøjer (DBA). I sammenhæng med PHP vil der oftest være tale om open source systemet MySQL, men andre kan også komme på tale såsom PostgreSQL, MS SQL Server, MS Access eller andet. Vi må holde os for øje, at dette DBA er installeret på en server for sig. Den er altså ikke en del af webserveren, som sørger for behandlingen af vore PHP scripts. (Husk i denne sammenhæng, at en server er et stykke software, som er installeret på en computer. De to servere kan altså sagtens befinde sig på samme maskine!) For at PHP kan arbejde med data fra en database, er det nødvendigt at: 1. Oprette en forbindelse til databaseserveren. Det vil oftest være nødvendigt at angive brugernavn og password 2. Angive hvilken database, vi ønsker at tilgå. 3. Sende en kommando til databasen En kommando til en database kaldes for en forespørgsel eller en query. 4. Hente det resultat, som vor query resulterer i. Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse. PHP tilbyder flere forskellige måder at foretage alt dette på. En sådan måde kaldes en API Application Programming Interface 1

PHP s MySQL Extension PHP s mysqli Extension PDO Webintegrator Det anbefales ikke længere at bruge førstnævnte (PHP s MySQL Extension) Opret en Connection (forbindelse) Mysqli tilbyder, at vi kan bruge en objekt-orienteret syntaks. Det er noget, som vi skal lære meget mere om på et senere tidspunkt. Lige nu vil vi blot tage imod dette tilbud, så lad os gå i gang Denne lidt kryptiske kodestump betyder, at scriptet nu har et objekt, som indeholder en forbindelse til databasen plus de dertil hørende indstillinger. Lad os kigge på de enkelte argumenter: localhost URI en til databaseserveren. localhost betyder, at denne er installeret på samme maskine som webserveren. Kunne også være en fuld adresse som http://mysql.wi.sde.dk eller en IP adresse som 192.168.0.3 my_user Det brugernavn, som man har fået tildelt af administratoren my_password Det password, som man har fået tildelt af administratoren my_db Navnet på den database, man ønsker at forbinde til. Bemærk at vi ud over at forbinde til databaseserveren også vælger database. Nu kan der jo nemt opstå fejl i sådan et script - der er hele 4 argumenter, hvor man kan skrive forkert, så lad os lige forsyne vort script med en lille fejlkontrol. Opgave 1 Opret en forbindelse vha. mysqli s objekt-orienterede syntaks. Start med at indtaste mindst én fejl i et af argumenterne. Konstatér, at fejlkontrollen virker. Fjern så fejlen. Hvad er en database uden data? Vi har brug for nogle data i databasen, så vi kan komme til at arbejde med dem. 2

Nogle af jer har måske allerede oprettet nogle tabeller til tidligere øvelser, men lad os alligevel hurtigt lægge nogle data ind. Opgave 2 1. Hent filen world.sql.gz i Fronter. Det er ikke nødvendigt at pahhe den ud. 2. Åbn phpmyadmin 3. Åbn din database. 4. Klik på fanebladet Import 5. Importer filen world.sql.gz Du har nu fået 3 relaterede tabeller lagt i din database: 1. Country ( 239 rækker ) 2. CountryLanguage ( 984 rækker ) 3. City ( 4.079 rækker ) Gør noget! Opret og eksekver en forespørgsel Lad os starte med at prøve at trække nogle data ud af databasen. Vi vil gerne have fat i alle overskrifter på nyheder fra tabellen nyheder. Vi starter med at oprette en SQL forespørgsel, som vi kalder $query. Denne forespørgsel sender vi til databaseserveren vha. af mysqli-metoden query. Bemærk at det er dårlig stil at benytte SELECT * Dette sløver eksekveringen af forespørgslen. Man skal skrive lige præcis de feltnavne, man har brug for også selvom man rent faktisk har brug for alle felter! Denne returnerer et nyt objekt (der var det igen ), som indeholder resultatet af forespørgslen derfor får dette objekt navnet $objresult. Det eneste vi nu mangler er at få fat i disse data og gøre noget ved dem. I dette tilfælde vil vi blot udskrive dem på en liste. Da vi må formode, at der kan være flere poster i resultat-sættet, benytter vi en while-løkke. Denne løkke bliver sat til at hente et array vha. resultat-objektets indbyggede metode fetch_assoc. 3

Opgave 3 Lav en liste over alle lande, deres befolkningstal og landets navn på det lokale sprog. Opgave 4 Lave en liste over alle lande, det kontinent, de tilhører og befolkningstallet. Sorter dem efter befolkningstal med det befolkningsrigeste først. Opgave 5 Lav en liste over alle caribiske lande. Opgave 6 Lav en liste over alle lande, hvor der tales engelsk Opgave 7 Lav en liste over alle lande, hvor spansk er det officielle sprog. Opgave 8 Lav en liste over alle lande, deres styreform og deres hovedstad. SQL query en er blot en tekststreng Indtil nu har vi arbejdet med simple SQL-strenge, forstået på den måde, at det snildt har være muligt at oprette dem i en enkel tekst-variabel. Man kan dog sagtens komme ud for, at skulle bygge sin forespørgsel op på baggrund af div. betingelser i scriptet. Lad os f.eks. antage, at vi er ved at bygge et site, hvor brugerne kan se data fra vor Worlddatabase. De et sted vælge mellem at se en liste over alle lande eller blot over alle europæiske lande. Ved et klik på en af knapperne sendes der et parameter med til scriptet. Først og fremmest skal vi have fat i brugerens valg: 4

Nu støder vi så ind i problemet, at i tilfælde af at brugeren har valgt alle lande skal der slet ikke nogen WHERE-klausul på forespørgslen. En løsning kunne se således ud: Det lille mellemrum inden WHERE er vigtigt, da der ellers ville komme til at stå SELECT Name FROM CountryWHERE Continent = Europe. Opgave 9 Lav et script, hvor du kan lave et udtræk, der viser: alle afrikanske lande eller alle afrikanske lande med styreformen republik eller alle afrikanske lande med styreformen republik og et befolkningstal over 2 mill. Action Queries Det er jo også nødvendigt at kunne manipulere med data. Vi skal både kunne opdatere eksisterende poster tilføje nye poster slette poster Hvor SELECT forespørgsler er harmløse i og med de blot læser data, er disse tre typer forespørgsler lidt farligere at have med at gøre, da de rent faktisk ændrer i data og de gør det uden at spørge 2 eller 3 gange, om du er helt og 100% sikker! Opdateringer Opdateringsforespørgsler skal i 99,9% af alle tilfælde indeholde en WHEREklausul. Det er meget sjældent, at vi har brug for at opdatere i ALLE poster. Syntaksen er: Et eksempel : 5

Således fik Marianne verdensherredømmet Hvis vi ville nøjes med at give hende herredømmet over Antarktis, men samtidig give befolkningen en højere forventet levealder, kunne query en se således id: En UPDATE forespørgsel returnerer ikke noget Result-objekt, men blot true, hvis den lykkes, eller false, hvis den ikke lykkes. Derfor kan det give mening at udføre query en à la dette: Opgave 10 Opdater den forventede levealder med +2 år i alle afrikanske republikker. Opgave 11 Revolution! Udskift Elisabeth II med Justin Biber som statsoverhoved i alle relevante lande. Opgave 12 Revolutionen mislykkedes! Skift tilbage til Elisabeth II. Opgave 13 Opdater alle europæiske lande, så de nu ligger i Afrika Opgave 14 Nulstil ændringen fra forrige opgave. Tilføjelser INSERT-forespørgsler indeholder aldrig en WHERE-klausul! Det vil være meningsløst, da denne type queries netop indsætter en ny post. 6

Syntaksen er: Bemærk, at vi har 2 parenteser, som hver indeholder en række værdier. Rækkefølgen i parentes 2 skal være som i parentes 1: Når vi indsætter poster er det vigtigt, at sikre at databasens regler overholdes. Her tænkes der på felt-typer, primærnøgler, relationer osv. Overholdes de ikke, kan tilføjelsen ikke gennemføres! En INSERT forespørgsel returnerer ligesom en UPDATE forespørgsel enten true eller false. Opgave 15 Tilføj et nyt land. Sørg for at alle felter er udfyldt. Husk sprog og hovedstad. Når man tilføjer en ny post til en tabel, som er udstyret med et autonummererings/auto_increment felt, kan det ofte være ønskeligt straks at kunne aflæse dette autogenerede nummer. Msqli har en metode, insert_id netop til dette formål. Uanset hvad databasen tildelte for et nummer, har vi nu dette i variable $new_id. Dette er den eneste fornuftige og den sikreste måde at udtrække dette nummer på! Lad være med at finde på nogen som helst anden måde! Hvis man kommer til at køre metoden insert_id på en tabel uden at autonummereringsfelt eller sidste query ikke var enten en UPDATE eller en INSERT forespørgsel, returneres tallet 0 7

Opgave 16 Opret Svendborg med alle oplysninger i City tabellen. Sæt Svendborg til at være hovedstad i Danmark Webintegrator Slette poster Slette forespørgsler skal i 99,9% af alle tilfælde indeholde en WHERE-klausul. Syntaks Det er ofte en god ide, at sikre sig at field_name indeholder unikke værdier. Ovenstående sletter ikke kun den Claus, som jeg er sur på, men alle Claus er i tabellen! Opgave 17 Slet alle lande, der har en forventet levetid under 70 år. Opgave 18 Udslet hele Oceanien! Opgave 20 Slet relaterede poster til de to foregående opgaver i tabellerne City og CountryLanguage. 8