Webprogrammering Med PHP - Læsning Af Data Fra Databasen

Det følgende beskriver hvordan du i PHP henter data fra datalaget. Der kan naturligvis også indsættes data i databasen via PHP, men vi venter lidt med det.

Hent rækker fra databasen

Vi begynder med et kode eksempel, der henter og viser alle blog indlægs titel.

<?php
 
require_once("db.php");
 
$sql = "SELECT * FROM posts";
$posts = db_query($sql);
 
// Så æøå ser rigtige ud
header('Content-type: text/plain; charset=utf-8');
 
foreach($posts as $post){
    echo("Blog post titel: " . $post['title'] . "\n");
}
 
?>

Den første linje med require_once inkluderer hjælpefunktioner til at interagere med databasen; deriblandt funktionen db_query. Denne funktion sender et SQL udtryk til databasen, og giver en liste med alle rækker, der matchede udtrykket, tilbage. I den næste linje sættes variablen $sql til SQL udtrykket, der henter samtlige indlæg fra posts tabellen i databasen. Herefter eksekveres udtrykket op i mod databasen. Og tilsidst skrives titlen for hvert indlæg i listen $posts ud.

Bemærk: header er en speciel PHP funktion, der gør os i stand til at koble metadata på de data, der sendes. Tænk på metadata som information, der er skrevet uden på et almindeligt brev. I dette tilfælde angives at teksten, der sendes, er et almindeligt tekstdokument skrevet i utf-8 format. Uden denne angivelse bliver æøå vist forkert, som det sker så tit i mails osv.

Hent data i en enkelt række

I stedet for alle rækker i posts tabellen nøjes vi med at hente præcis en række. Dette kræver, at vi sætter en betingelse på SQL udtrykket i form af en WHERE betingelse på et indlægs id. Dette id kommer som input fra klienten, i form af query variablen id. Lad os se på koden:

<?php
 
require_once("db.php");
 
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = ?";
$post = db_query_get($sql, array($id));
 
// Så æøå ser rigtige ud
header('Content-type: text/plain; charset=utf-8');
 
echo("Blog post titel: " . $post['title']);
echo("\nBlog post body: " . $post['body']);
 
?>

Den første linje med require_once inkluderer igen hjælpefunktioner til at interagere med databasen; deriblandt funktionen db_query_get. Denne funktion henter en enkelt række ud af databasen, og tager to argumenter: SQL udtrykket og en liste af værdier til at indsætte i dette udtryk.

Næste linje indeholder SQL udtrykket til at hente et blog-indlæg med et bestemt id. I bør kunne genkende SQL udtrykket, bortset fra at det indeholder et ?. ? er en krog hvorpå der hænges data. Grunden til at vi ikke bare gør noget som

$sql = "SELECT * FROM posts WHERE id = $id";

er at det udgør en alvorlig sikkerhedstrussel. Det er brugeren, der i sin webbrowser angiver værdien af $id, og denne kunne derfor i princippet angive SQL udtrykket til at fjerne al data fra databasen. ?, eller prepared statements som de hedder, sikrer mod dette ved at tillade markøre, der indikerer, at værdien ikke skal tolkes som SQL.

Til sidst eksekveres SQL-udtrykket mod databasen med værdien af $id hængt på krogen, og resultatet gemmes i variablen $post.

De sidste linjer skriver værdierne ud. I den rigtige applikation sendes disse data til HTML skabalonen.

Bemærk: Du kan også benytte funktionen var_dump til at skrive hele indholdet ud af en variabel; i så fald vil det være:

var_dump($post);
Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License