Kapitel 11. Använda databaser i programmering (formulär)

Innehållsförteckning
SQL-funktioner i PHP
Övningar

Du behöver inte kunna skriva webbsidor sedan tidigare, även om det underlättar om du kan lite XHTML.

Tips: Faktum är att kombinationen Apache (webbserver), MySQL (databashanterare) och PHP (skriptspråk) är mer använd än Microsoft IIS/ASP/SQL på Internet. Källa: www.netcraft.com .

SQL-funktioner i PHP

De vanligaste funktionerna som du kommer att behöva för att kommunicera med din MySQL-server från PHP.

mysql_connect

resurs mysql_connect( [sträng server [, sträng användarnamn [, sträng lösenord [, bool nylänk [, int klient_flaggor]]]]])

mysql_connect() skapar en förbindelse med MySQL-servern så att vi kan arbeta med den från vårt PHP-skript. Om vi inte anger några värden är mysql_connect inställd på att använda följande värden: server = localhost:3306, användarnamn = den användare som kör skriptet (oftast webbserverns användare; www eller apache) och lösenord = tomt lösenord. localhost är den lokala datorn (den som skriptet körs på) och 3306 är standardporten för MySQL-servern.

Mysql_connect returnerar en MYSQL-länk om den lyckas ansluta. Misslyckas den returneras FALSE.

Förbindelsen med MYSQL-servern dör så snart PHP-skriptet körts, eller när du anropar mysql_close()-funktionen.

I exempel 11-1 skapar vi en anslutning ($conn) till MySQL-servern på localhost, vi loggar in på den som användaren kalle med läsenordet hemligt. Om anslutningen misslyckas avslutar vi skriptet med or die..., där vi anropar funktionen mysql_error() som skriver ut varfär anslutningen misslyckades. Om anslutningen lyckades skriver vi ut (print) lite text och avslutar färbindelsen med mysql_close()-funktionen.

I exempel 11-2 skapar samma anslutning som i exempel 11-1 med en enda skillnad: vi har lagrat servernamnet, användarnamnet och lösenordet i variabler. Variabeln $host anger vilken MySQL-server vi vill ansluta till, $user anger vilken användare vi vill ansluta som och $pass anger vilket lösenord vi vill använda.

Not: Även om vi inte behöver avsluta förbindelsen till MySQL-servern (förbindelsen avslutas automatiskt när skriptet körts) bör vi göra det. Om inget annat ser det snyggare ut i koden.

mysql_query

mysql_query använder du för att ställa frågor till databasen från PHP. Om du inte anger ett resursid kommer PHP att använda den senast öppnade länken till en databas. Svaret från databasfrågan buffras i minnet och du kan använda till exempel avsnittet mysql_fetch_row för att hämta datat.

Not: Du skall inte använda semikolon (;) i SQL-frågorna du ställer med mysql_query !

mysql_query returnerar TRUE om frågan lyckas, och FALSE om den misslyckas med frågan. Orsaker till misslyckande kan vara: du anger felaktigt namn på tabeller och poster, du saknar behörighet till databasen eller att det saknas en förbindelse till databasen.

Om frågan lyckas kan du använda mysql_num_rows() för att få reda på hur många poster den returnerade (detta gäller enbart select-frågor). mysql_affected_rows() returnerar på samma sätt antalet poster som användes av en delete-, insert-, replace- eller updatefråga.

Om du ställer frågor av typen SELECT, SHOW, DESCRIBE eller EXPLAIN kommer mysql_query() returnera en länk som du kan använda i mysql_fetch_array(). När du är klar med behandlingen av datat kan du frigöra resurserna med hjälp av mysql_free_result(). Detta sker automatiskt när skriptet avslutats.

mysql_fetch_array

mysql_fetch_array hämtar SQL-frågan och lagrar den som en tabell, en numerisk tabell eller båda.

Returnerar en tabell baserad på en post, eller FALSE om det inte finns några poster kvar.

mysql_fetch_array() är en utökad version av mysql_fetch_row(). Skillnaden mellan dem är att med mysql_fetch_array() kan du komma åt dina fält med deras namn och inte bara numeriska värden.

Om två, eller fler, fält har samma namn kommer den sista att gälla. För att komma åt fältet innan måste du använda det numeriska värdet, eller skapa ett alias för fältet.

Resultattypen kan vara MYSQL_ASSOC, MYSQL_NUM eller MYSQL_BOTH och anger vilken typ av array vi vill ha som svar. MYSQL_ASSOC ger oss en array där vi kan använda $var['namn'], där $var är namnet på den array vi har och ['namn'] anger vilket fält vi vill använda.

MYSQL_NUM numrerar fälten i arrayen så att du kommer åt dem genom $var[0], $var[1] ... Denna metod kräver att du känner till din databas väl, eftersom att du måste veta ordningen på fälten. Fälten börjar räknas från noll (0), till exempel $var[0].

Övningar