PHP & MySQL Del I
Vet att jag tidigare pratat om crud och lite annat. Men jag har inte täckt hur man kommer igång att arbeta med sin databas.
Så tanken är följande
- I Del I så skapar vi en tabell och stoppar in en rad som vi sedan hämtar (länk)
- I Del II bygger vi ett formulär som gör att vi kan fylla en klass t.ex. och skicka till databasen och få svar på det. (länk)
- I Del III har vi flera tabeller med många rader, då ska vi lära oss hur man ställer frågor till databasen mot många tabeller samtidigt och vad vi kan göra med det. (länk)
- I Del IV kommer vi uppdatera data i databasen (länk)
- I Del V kommer vi gå mer på djupet med MySQL-frågor.
Så nu börjar vi. MySQL är en bra och enkel databas som man börjar bli nyfiken på när man framförallt vill börja interagera med sin hemsida på något sätt. Hela tiden när du är ute på nätet ränner du i databaser. Facebook, bloggar alla hemsidor som har någon form av CMS-system… Du kanske har något enklare såhär i början. Komplettera din hemsida med en gästbok. Hjälpa din idrotts-förening med en festanmälan eller något i den stilen. Det finns även alternativ som att skriva och ändra i filer istället. Finns t.ex. bloggar som sparar allt i xml. Bra att veta om inte databas finns att tillgå. Samt att man kan ju ta en backup av hela hemsidan genom att kopiera mappen från servern.
Nu sätter vi igång.
När man ska koppla sig till sin databas från php gör man det via php-kommandot mysql_connect. (det finns även mysql_pconnect, men det tar vi senare) Väldigt logiskt. mysql_connect vill ha lite parametrar för att kunna koppla sig.
mysql_connect($server, $username, $password);
Vi behöver alltså en adress till databasen. För många webhotell så körs den på samma och är inte ovanligen localhost helt enkelt. Sedan har du oftast ett tilldelat användarnamn och lösenord, samt att du har en databas tilldelad dig. Kör du xamplite eller något dylikt på din lokala maskin och du inte har ändrat är det ofta användare:root, lösen:{inget}.
Ofta skapar man en variabel av sin connect-sträng. T.ex.
$link = mysql_connect($server, $username, $password);
För att få lite feedback vid utveckling kan vi lägga till en parameter. Undviks av många i produktion då det kan se tråkigt ut.
$link = mysql_connect($server, $username, $password) or die(mysql_error());
Nu har vi en återanvändbar parameter som vi kan kalla på. men vi är fortfarande inte kopplade till en databas utan fortfarande bara till servern. För att välja databas som vi ska arbeta med får vi använda oss av mysql_select_db. åter igen väldigt bra logiska namn.
mysql_select_db($database_name, $link)
Det finns några olika sätt att använda mysql_connect som också inverkar här. Man kan öppna en koppling till databasen och ha den öppen hela tiden. Eller så kan man öppna och stänga för varje fråga till databasen. Lite säkrare, skickar lite mer data.
Har du en ny wamp eller xampp eller lamp,mamp så kanske du inte har en databas. Så det är bäst att vi skapar en. Nästa exempel skapar en databas i din lokala mysql. Vi skapar den genom kod, sedan kommer du mest troligt använda något verktyg såsom phpmyadmin eller något dylikt. phpmyadmin får väl ses som det vanligaste grafiska hjälpmedlet för att hantera mysql-databaser. I princip alla webhotell har det.
<?php
//Vi skapar parametrar med server
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$link = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());
// Vi skapar vår sql-fråga, denna skapar en databas
$CreateDB= "Create database skola";
mysql_query($CreateDB,$link) or die(mysql_error());
?>
Den kan vi kalla CreateDB.php. Sedan är det bara att tuta och köra. Nu har vi en tom databas. Det kan vi ju inte göra någonting med.
Vi får skapa oss en tabell. Vi skapar en CreateTable.php som ser ut enligt följande:
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "skola";
$link = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());
//mysql_select_db väljer vår databas. I detta fallet använder vi parameter med namn och vår länk
mysql_select_db($db_name,$link);
$sqlCreateTable1 = "CREATE TABLE `skola`.`Klasser` (
`Klass_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`klassNamn` VARCHAR( 15 ) NOT NULL ,
`argang` INT NOT NULL ,
`antalElever` INT NOT NULL ,
`modified` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM";
mysql_query($sqlCreateTable1,$link) or die(mysql_error());
?>
Vi skapar tabellen klasser, som är tänkt att beskriva klasserna som går i en skola. Vi har klass_id som är ett unikt klass-id, ett numeriskt fält som automatiskt räknar upp, alltid bra att ha för att göra smidiga frågor. Klass-namn, en text som vi visar där vi ska göra något med klassen. T.ex. 3A, 4B osv. argang är tanken att det är hur många år dom varit i skolan. Inte alla skolor har klassnamn så som 4b som avslöjar det. (tydligen så motsvarar “kakan” ungefär årskurs 4 på en skola i Göteborg). Modified är ett fält som varje gång som raden uppdateras kommer spara tiden automatiskt så att man kan se när det hänt något på raden. Sker helt av sig själv i databasen, ingen extra kod krävs.
Så nu har vi en databas, vi har en tabell. Om vi skulle stoppa in lite data i tabellen. Men innan vi gör något så skapar vi en fil som heter config.php. I den sparar vi parametrar som vi ska återanvända vid många tillfällen.
<?php
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "skola";
$link = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());
?>
sedan skapar vi en fil, låt oss döpa den till CreateKlass.php. I den lägger vi följande
<?php
include ‘config.php’;
mysql_select_db($db_name, $link);//vi skapar parametrar för datan vi stoppar in
$klassNamn = ’3A’;
$argang = 3;
$antalElever = 28;// Nu ska vi skapa våran fråga
$sqlInsert = "insert into klasser (klassNamn,argang,antalElever) values(‘$klassNamn’,$argang,$antalElever)";
//vi sätter resultatet av vår fråga till parametern $res. Vid en insert får man tillbaka 1 om det gått bra, annars 0.
$res = mysql_query($sqlInsert, $link) or die(mysql_error());
echo $res;
?>
Kör vi den har vi skapat klass 3A med 28 elever. Om vi nu vill se våra klasser då? Vi skapar en ny fil som vi döper till displayKlass.php.
<?php
include ‘config.php’;
mysql_select_db($db_name, $link);
//vi skapar en fråga
$sqlSelect = "Select * from klasser";$result = mysql_query($sqlSelect, $link) or die(mysql_error());
//vi stoppar in vårat resultat i en array, så blir den enkel att använda
$rows = mysql_fetch_array($result);
//mysql_num_rows kollar hur många poster vi hittade i vår fråga
$num_rows = mysql_num_rows($result);
//Nu ska vi slänga ut raderna i webb-läsaren. Detta kan man t.ex. göra med en do-while loop
//har man bara 1 rad, t.ex. vid en väldigt exakt fråga så behöver man inte do-while’a utan kan använda echo$rows[‘klassNamn’] med en gång. $rows är en array som har varje rads värde.
do
{
echo $rows['klassNamn']."<br>";
}while($rows = mysql_fetch_assoc($result));
?>
Så nu har vi skapat en databas, skapat en tabell i den. Stoppat in lite data som vi sedan visar.
Detta är så grundläggande det kan bli. Kollar vi på vår tabell med t.ex. phpmyadmin så ser det ungefär ut såhär:
Vi har ett klass_id som är värde som räknar uppåt. (att id 2 saknas är för att jag har varit inne och tagit bort en rad). Vi har ett modifierings-datum. i detta fall när det skapades.
Klart för nu. Välkommen tillbaka till Del III när vi skapar elever