NemProgrammering.dk logo

Prepared Statements

  Skrevet af: Kenneth     25-11-2012     Skrevet i: PHP

Hej allesammen

Nu er det ved at være et stykke tid siden jeg har skrevet et nyttigt tip til jer, men frygt ej, der er flere på vej. Det næste bliver MySQLi og prepared statements, som skal gøre det nemt for os at øge sikkerheden på vores php-scripts der kommunikerer med vores database.

Jeg laver denne serie omkring prepared statements, da det er officielt offentliggjort fra Zend, som er dem der vedligeholder PHP, at MySQL-API’et, som er det de fleste lærer først, er forældet og usikkert. De anbefaler på denne side at man anvender PDO eller MySQLi i stedet.

Hvad er et prepared statement?

Et prepared statement, som er det vi benytter os af i MySQLi, er en opstilling af de enkelte elementer, vi kender fra en simpel mysql_query, og sender dem til serveren, en efter en. Dette gør at serveren først får en query/forespørgsel på en handling der skal udføres, som vi selv har skrevet, og dernæst sendes de enkelte værdier til serveren. Så nu sendes der ikke længere en direkte forespørgsel til serveren, men kun den halve forespørgsel, fordi værdierne, der skal indsættes, først kommer bagefter.

Lad os tage et hurtigt eksempel:

if ($stmt = $mysqli->prepare('SELECT `titel`, `tekst` FROM `content` WHERE `page_id` = ?')) {
/*Her fortæller vi serveren hvilken type værdier vi sender til den*/
$stmt->bind_param('i', $page_id);
/*Opret de påkrævede variabler*/
$page_id = $_GET['page_id'];
/*Udfør din forespørgsel på serveren.*/
$stmt->execute();
/*Fortæl php hvilke variabler du vil gemme resultatet i variabler*/
$stmt->bind_result($side_titel, $side_tekst);
/*Gem resultatet i ovenstående variabler*/
$stmt->fetch();
/*Vi lukker forbindelsen til serveren*/
$stmt->close();
}
else {
echo $mysqli->error;
}

Så skal vi også lige have forklaret ovenstående…

Det der sker i ovenstående kode er at vi laver et if-statement til at styre vores forespørgsel. Hvis du har set videoerne omkring php her på nemprogammering.dk ved du sikkert allerede hvordan et if-statement fungerer. Så vi opsætter altså vores forespørgsel til databasen i et if-statement, så hvis vores forespørgsel bliver sendt til serveren vil den gå igang med at sende det resterende indhold til vores forespørgsel og derefter returnere noget data.

Lad os kigge på linjen $stmt->bind_param(); da denne nok vil forvirre rigtig mange. Når du i citationstegnene skriver i står for integer betyder det at du vil indsætte et heltal. Et s betyder string, altså noget tekst. Et d står for double og bruges til at sende decimaltal, altså tal der har værdier efter et komma, såsom 12,54523. Ville man sende denne med en integer, ville den afrunde til 13. I eksemplet har jeg kun anvendt et heltal, da jeg jo skal hente noget indhold ud på siden.

For at udskrive værdierne vi har hentet, skal vi blot gøre ligesom vi kender det fra MySQL.

echo '<h1>'.$side_titel.'</h1>' ;
echo '<p>'.$side_tekst.'</p>' ;

For at kunne følge med i de videoer jeg laver omrking dette, ville det være en fordel at se videoerne omkring php og mysql her på nemprogrammering.dk.

Så til sidst er det blot at sige at I skal holde øje med gæstebloggen for at se de spændene videoer jeg lægger op.

Spørgsmål og kommentarer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

  • Kenneth H. siger:

    Hej
    I starten bliver det blot noget simpelt, ligesom de originale MySQL-videoer, hvor jeg viser de basale ting, såsom SELECT, INSERT INTO, UPDATE og DELETE. Dertil viser jeg hvordan man laver en simpel navigationsmenu. Hvis jeg får tiden til det, så er planen at jeg vil lave et mindre CMS hvor jeg implementerer html, css, php og mysqli(prepared statements). Det er også meget muligt at jeg laver det hele til brug i det simple CMS fra starten, således at det bliver en slags undervisning og mini-projekt for de besøgende.

  • . siger:

    Super artikel Kenneth!

    Du snakker om noget videoer – hvad er det for noget og hvad vil de handle om? :-)