Äldre Nyare
08-12-2010 13:02:00 . . . . 174.21.112.78.rev.sfr.net


Redigeringar av senaste författaren:

Added:
Taget från artikeldelen av phpportalen. Då någon redan skapat den här rubriken utan att skriva nåt tyckte jag att det var såg finare ut :)

Tänkt börja programmera PHP lite seriösare? Kanske har du tänkt skriva lite större applikationer i språket? Då bör du kunna använda någon databas. En SQL-databas är smidigast, MySQL är dessutom gratis och PHP har fullt stöd för den, så den är ju ett självklart val! Läs denna artikel om du vill lära dig grunderna i MySQL och PHP's funktioner för att använda MySQL i dina script.


Nu medan vi är kvar i början av artikeln så kanske jag bör säga att detta inte är en artikel för nybörjare på PHP. Du bör ha koll på grunderna i PHP, och helst lite extra. Vad en funktion är ska vara en självklarhet för de som läser denna artikel. Så, nu kan vi börja!


=== Vad är MySQL?? ===

MySQL är en gratis SQL-databasserver. SQL står för Structured Query Language och är alltså språket man använder för att kommunicera med databasservern. Det ser ganska lika ut på alla SQL-servrar. En databas är för övrigt en binär form av datalagring.


=== Grunderna i MySQL ===

Självklart har du en server med PHP på och, förhoppningsvis, MySQL. Om inte så bör du fixa det, ett bra ställe att börja är på MySQLs? hemsida (www.mysql.com). När du har en fungerande MySQL-server så ska du också ha användarnamn och lösenord till den, det ser vi också som en självklarhet i denna artikel. Nu drar det igång på allvar!

I din mysql-mapp under bin-katalogen ligger filen mysql.exe, lokalisera den och öppna den genom att dubbelklicka på den. Under Windows 2000 och ME har vissa användare tydligen haft problem med detta, i så fall så för du öppna kommandotolken (DOS-prompten) och öppna filen därifrån. Om den ligger på ditt webhotell så får du öppna filen över telnet eller liknande. På Linux-system heter filen bara mysql och kan (om allt är konfigurerat rätt) öppnas genom att bara skriva mysql i en prompt vart som helst.

När du fått igång programmet skriver du in följande "show databases;". Då får du en lista på de existerande databaserna på din MySQL-server. Om det är en ny server bör du hitta en som heter "mysql" och en som heter "test".

Nu ska vi skapa en ny databas med namnet php, för att göra detta skriver vi "CREATE DATABASE php;" och trycker enter. Då bör det stå något liknande:
"Query OK, 1 row affected (0.06 sec)".

OBS! Lägg märke till att vi avslutar våra kommandon med ett semikolon, precis som i PHP.

Nu ska vi säga till servern att vi vill använda vår nyskapade databas, då skriver vi detta: "USE php;". Då får du meddelandet "Database changed". Allt OK så långt.

Nu ska vi även ta bort vår databas genom att skriva "DROP DATABASE php;".

Det va det, nu kan du skapa databasen php igen och se till att den är aktiv. Sedan ska vi börja leka lite med tabeller.

I fortsättningen kommer jag skriva MySQL-kommandon med STORA bokstäver. Namn på tabeller eller fält i tabeller kommer jag skriva med vanliga, små bokstäver och värden kommer jag skriva inom citationstecken. Precis som MySQL vill ha dem. Då kan du bättre se skillnad på dem.

Nu skriver vi in följande kod i programmet:
<code>
CREATE TABLE kompisar(
namn VARCHAR (50),
alder INT,
email VARCHAR (50)
);
</code>

Då skapade vi tabellen kompisar med 3 olika fält. Första fältet "namn" är av typen VARCHAR med en maxlängd på 50 tecken. Detta är alltså jämförbart med en sträng. Sedan kommer fältet "alder" där vi kan skriva in kompisens ålder, den är av typen INT och tar därför bara emot heltal. Efter det kommer fältet "email" som även det är av typen VARCHAR med längden 50. Där kan du lagra dina kompisars email-adresser.
I helhet så började vi med "CREATE TABLE kompisar" vilket skapar en tabell med namnet kompisar, alla tabeller måste ha minst ett fält och dessa skriver man inom parentesen och separerar dem med kommatecken. Vi avslutar sedan raden genom att stänga parentesen och lägga dit ett semikolon.

Om vi sedan vill mata in lite kompisar i databasen, vilket vi troligtvis vill, så utför vi följande :
<code>
INSERT INTO kompisar VALUES(
"Erik", 19, "email@domain.com"
);
</code>
Ni förstår säkert vad som händer här, men jag går igenom det ändå. Vi använder oss av INSERT INTO och sedan definierar tabellnamnet "kompisar". Sedan vill den ha tre värden eftersom det finns tre fält i tabellen, det första är av datatypen VARCHAR liksom det sista, medan det mittersta är av typen INT. När man skriver strängar (VARCHAR) vid denna handling så skall de vara inom citationstecken (""). Värdena vi matar in separeras med kommatecken. Vi avslutar därefter kommandot med semikolon. Kompisens namn är alltså Erik, åldern är 19 och eposten är email@domain.com. Lägg nu till några av dina kompisar *riktiga eller fejkade* till tabellen, vi kommer att använda oss av dem senare. Lägg helst till fler än 2 för att det ska fungera bra senare.

Nu vill vi ju se hur vår tabell ser ut. Då skriver vi följande: SELECT * FROM kompisar;
Då får vi en fin utskrift på hur tabellen ser ut och vad som finns i den.

Nedan följer ett antal av de vanligaste datatyperna i MySQL med beskrivning.


=== Datatyper i MySQL ===

==== TINYINT ====
En väldigt liten integer(heltal).

SIGNED kan den hålla tal mellan -128 och 127.
UNSIGNED kan den hålla tal mellan 0 och 255.

Längd behöver inte defineras; normalt satt till 4.


==== SMALLINT ====
En liten integer(heltal).

SIGNED kan den hålla tal mellan -32768 och 32767.
UNSIGNED kan den hålla tal mellan 0 och 65535.

Längd behöver inte defineras; normalt satt till 5.


==== MEDIUMINT ====
En mellanstor integer(heltal).

SIGNED kan den hålla tal mellan -8388608 och 8388607.
UNSIGNED kan den hålla tal mellan 0 och 16777215.

Längd behöver inte defineras; normalt satt till 9.


==== INT eller INTEGER ====
En vanlig integer(heltal).

SIGNED kan den hålla tal mellan -2147483648 och 2147483647.
UNSIGNED kan den hålla tal mellan 0 och 4294967295.

Längd behöver inte defineras; normalt satt till 11.


==== BIGINT ====
En stor integer(heltal).

SIGNED kan den hålla tal mellan -9223372036854775808 och 9223372036854775807.
UNSIGNED kan den hålla tal mellan 0 och 18446744073709551615.

Längd behöver inte defineras; normalt satt till 21.


==== FLOAT ====
Ett flyttal (kan inte vara unsignes).
Längd behöver inte defineras; normalt satt till 10,2 där "2" är antalet decimaler.


==== DATE ====
Ett datum, i formatet ÅÅÅÅ-MM-DD, mellan 1000-01-01 och 9999-12-31.
Längd behöver inte defineras.


==== DATETIME ====
Ett datum och tid, kombinerat. I formatet ÅÅÅÅ-MM-DD TT-MM-SS, mellan 1000-01-01 00:00:00 och 9999-12-31 23:59:59.

Längd behöver inte defineras.


==== TIME ====
Tid, i formatet TT:MM:SS.


==== YEAR ====
Ett årtal, längden kan vara 2 eller 4.
- Om längden är 2 så kan årtalet vara mellan 1970 - 2069 (70-60)
- Om längden är 4 så kan årtalet vara mellan 1901 - 21155.

Längd behöver inte defineras; normalt satt till 4.


==== VARCHAR ====
En stäng med längden 1-255. Längden måste defineras.


==== BLOB eller TEXT ====
En BLOB eller TEXT med en maxlängd på 65535 tecken.

Längd behöver inte defineras.


==== LONGBLOB eller LONGTEXT ====
En BLOB eller TEXT med en maxlängd på 4294967285 tecken.

Längd behöver inte defineras.


=== Mer SQL ===

Eftersom ni redan sett exempel på strukturen i SQL så ska jag inte gå in djupare på detta, om ni vill gå in djupare på MySQL-användandet så finns det troligtvis någon bra länk på denna sidas länkarkiv.

Tidigare skrev vi ut allting ur tabellen. Man kan även begränsa sökningar i tabeller med följande:
<code>
SELECT * FROM kompisar WHERE name="Erik";
</code>
Då plockar den ut allt ur raden/raderna där namnet är Erik. Om man skulle vilja ha ut ett begränsat antal (t.ex. 10) rader ur tabellen kan man göra följande:
<code>
SELECT * FROM kompisar LIMIT 10;
</code>
Man kanske vill ha de nästa tio också? Det gör man så här:
<code>
SELECT * FROM kompisar LIMIT 10,10;
</code>
När man vill ha ut datan ur sin tabell så kanske man vill ha den sorterad på något sätt, till exempel sorterad efter namnen. Det gör man så här:
<code>
SELECT * FROM kompisar ORDER BY namn;
</code>
Ibland kanske man inte vill ha ut hela raderna, utan bara alla email addresser i tabellen. Då gör vi på detta viset:
<code>
SELECT email FROM kompisar;
</code>
Och nu, när vi gått igenom det mesta där så ska vi prova att bygga ihop en lång förfrågan. Vi skulle kunna ta ut namnet på alla de som är 20 år gamla. Vi sorterar namnen efter bokstav, och vill bara ha tio träffar.
<code>
SELECT namn FROM kompisar WHERE age=20 LIMIT 10 ORDER BY namn;
</code>
Det va nog det mesta om det, nu kan vi fortsätta framåt. Här följer några av de vanligaste handlingarna man utför i MySQL med beskrivningar och olika mindre kodexempel:


==== UPDATE ====

Om man till exempel stavade fel på något när man matade in det i tabellen så kan man smidigt uppdatera värdet med detta kommando:
<code>
UPDATE kompisar SET namn="Eric" WHERE namn="Erik";
</code>
Här uppdaterar vi alltså fältet namn på den raden där det är "Erik" till "Eric". Tänk dock på att folk stavar sina namn olika. Skulle detta varit en "äkta" databas hade det inte varit klokt att använda sig av namnet, utan istället skapat något slags index som är helt unikt.


==== ALTER ====

Om du till exempel vill lägga till en kolumn i din tabell så kan du göra detta med kommandot alter:
<code>
ALTER TABLE kompisar ADD icqnum INT;
</code>
Här lägger vi till kolumnen icqnum av typen INT i våran tabell kompisar. Denna nya kolumn kan vi använda för att lagra våra vänners ICQ-nummer.


==== DELETE ====

Om du gjort något fel eller av någon annan anledning vill ta bort en rad ur din tabell så kan du göra det med DELETE, så här använder du det:
<code>
DELETE FROM kompisar WHERE name="Eric";
</code>
Du kanske bara vill ta bort de första 10 raderna i tabellen? Detta gör du så här:
<code>
DELETE FROM kompisar LIMIT 10;
</code>
Det va nog tillräckligt med kunskap för att börja använda MySQL med PHP. Dock finns det alltid mer att lära om denna användbara databasserver. På mysql.com kan du hitta mycket användbar dokumentation som är värd att läsa.


=== PHP + MySQL ===

Nu ska vi gå in på användandet av MySQL i dina script. Det finns ett antal funktioner som är nödvändiga till detta, alla dem kommer vi gå igenom och även några olika alternativ till vissa av dem samt en del andra funktioner.

Innan du kan börja använda MySQL i ditt script måste du skapa en länk till MySQL-servern. Detta utför du med funktionen mysql_connect(). Den anropas såhär:
<code>
$link = mysql_connect("localhost", "användare", "lösenord");
</code>
Man definerar variabeln $link med själva länken till MySQL. Argumenten som funktionen vill ha är adressen till servern där MySQL-servern man vill koppla upp mot ligger, oftast är detta som ovan, alltså "localhost", efter det vill funktionen ha användarnamn och lösenord till MySQL-servern. Dessa tre saker är nödvändiga för att skapa länken.

Sedan måste vi berätta för MySQL vilken databas skriptet tänker använda, detta gör man med funktionen mysql_select_db(). Den vill ha två argument, namnet på databasen och länken till servern. Vi anropar den såhär för att använda våran databas (php).
<code>
mysql_select_db("php", $link);
</code>
Så där, nu är MySQL-servern redo att arbeta åt oss. Nu ska vi säga till den vad den ska göra genom att skicka ett "query" (förfrågan) som den ska utföra, till detta använder vi funktionen mysql_query() som tar argumenten $query och $link. Den returnerar ett resultat som man använder för att få ut data ur databasen, det sparar vi i variabeln $result.
<code>
$result = mysql_query($query, $link);
</code>
Men innan vi gör detta så måste vi definiera variabeln $query. Den bygger vi upp på samma sätt som när vi pratade med MySQL-servern ovan. Alltså:
<code>
$query = "SELECT * FROM kompisar";
$result = mysql_query($query, $link);
</code>
Detta gör så att vi får ut alla fält från alla rader ur tabellen kompisar, och det vill vi.
Så, nu ska vi börja arbeta med variabeln $result så vi kan skriva ut våra värden. Denna kan vi bearbeta med antingen funktionen mysql_fetch_array() eller mysql_fetch_row(). Likheten är att man av båda får en array av en rad från databasen, skillnaden är att mysql_fetch_array() döper fälten i arrayen till samma sak som i databasen medans mysql_fetch_row() numrerar dem. Exempel:

<code>
while($array = mysql_fetch_array($result))
{
//här kommer vi åt namn genom
echo $array["namn"];
}
</code>

<code>
while($row = mysql_fetch_row($result))
{
//här kommer vi åt namn genom
echo $row[0];
}
</code>

Bör nämnas att mysql_fetch_row() börja numreringen från 0. Första fältet blir alltså [0].
Personligen gillar jag mysql_fetch_array mest. Men det är en smaksak, jag kommer i vilket fall som helst använda den här. Nu ska vi skriva ut våra kompisar.

<code>
while($array = mysql_fetch_array($result))
{
echo $array["namn"];
echo $array["aldern"];
echo $array["email"]."<br>";
}
</code>


While-slingan snurrar så länge det finns några kompisar kvar i tabellen som inte blivit utskrivna. Och nu har vi alla kompisar utskrivna på skärmen. Kanske inte så snyggt, men det kan du ju lätt ändra på.

Hela skriptet skall se ut så här (du ska självklart ändra "användare" och "lösenord"):

<code>
<?PHP

$link = mysql_connect ("localhost", "användare", "lösenord");
mysql_select_db("php", $link);

$query = "select * from kompisar";
$result = mysql_query($query, $link);

while($array = mysql_fetch_array($result))
{
echo $array["namn"]." ";
echo $array["alder"]." ";
echo $array["email"]."<br>";
}

?>
</code>


Detta skriptet borde lista alla kompisar i din databas om du inte gjort något galet. Men, man skulle väl kanske vilja lägga till användare till databasen från sin webbsida, visst skulle det vara smidigt.

Du får fixa formuläret själv, så att du har $namn, $alder och $email definierat (variablerna skapas ju automatiskt på PHP-sidan om du sätter formulärets "action" mot den). Utifrån det så gör du bara såhär:

<code>
$query = "INSERT INTO kompisar VALUES('".$namn."',".$alder."'".$email."')";
mysql_query($query, $link);
</code>


Så är det fixat
Kanske borde du också "databassäkra" din inmatning innan du lägger in den i databasen, se funktionen addslashes() (bland annat) för detta.

Du kan självklart utföra vilken (My)SQL kod som helst via funktionen mysql_query().


=== Lite andra PHP-funktioner för MYSQL ===


==== mysql_num_rows($result) ====
Denna funktion kan man använda för att se hur många rader som påverkades av vår förra query. När vi anropar den så skickar vi med $result variabeln $result som mysql_qyery() gav oss


==== mysql_list_dbs($link) ====
Returnerar en resultat-pekare ($result) som innehåller namnet på de olika databaserna som finns på servern.


==== mysql_free_result($result) ====
Frigör minnet som resultatet från MySQL-databasen gav oss. Detta behöver man normalt sett inte göra, men om man håller på med väldigt stora databaser och är rädd att minnet skall ta slut så kan man använda sig av detta.

==== mysql_close($db); ====
Ett kommando som stänger databasen $db. Kan vara schysst att göra.
Ett program som jag skulle vilja rekommedera är programet

=== Program till MySQL ===

==== Mysql Control Center ====
Programmet är väldigt lätt och förstå.
Programmet är ett opensorce program och kan ladddas hem här
http://www.mysql.com/products/mysqlcc/

= -------- =

För mer information om de MySQL-funktioner som finns i PHP kan du kolla i PHP-manualen under "MySQL functions". Där finns de alla listade med bra beskrivning och exempel.

Nu när du läst klart denna artikel så kanske du fortfarande har några frågor. Dessa får du gärna ställa till oss, och de andra på forumet. På vårat länkarkiv kan du hitta intressanta länkar om MySQL och PHP + MySQL. Om du tycker att någonting är fel i denna artikel så får du gärna kontakta mig på min email (still_afraid@hotmail.com).

// Emil Hedenberg
Skrivit lite om Mysqlcc //Jacob

Wiki-navigering
Wiki Index
Wiki Artiklar
Wiki Skolan
Wiki Guider
Wiki FAQ
Webbhotell
Domänregistrering
Wiki-sökning
Sök:
Dokumentalternativ
Visa dokumenthistorien
Senaste wiki-ändringar
Visa ändringarna
Inställningar
Wiki inställningar
Bra att veta
Vad är en Wiki?
Våra förhållningsregler
Trivselregler
Att använda Wikin
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB 2.0.4 © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic