miercuri, 16 ianuarie 2008

Puterea MySQL in PHP

PHP este una din cele mai folosite tehnologii la ora actuala atunci cand avem de-a face cu continut dinamic care implica informatii despre useri. Limbajul permite generarea usoara prin linii de cod a unei pagini HTML care sa fie servita browser-ului clientului, fara ca acesta sa poata avea acces la acest cod. Aceasta particularitate face din PHP limbajul preferat de acces la informatii sensibile de pe server, care sunt de obicei stocate in baze de date.

Imaginati-va un forum, care are o lista de utilizatori, fiecare cu informatii despre profilul sau, email, eventual o imagine avatar, drepturi de acces la paginile forumului, si toate mesajele postate de utilizatori. Toate aceste informatii se stocheaza usor si convenabil la o baza de date, care se afla pe un server ce ruleaza pe un workstation si deserveste browser-ul. Avem nevoie totusi de o modalitate de acces a bazei de date din interiorul scripturilor noastre ce genereaza informatia de pe pagina afisata. Asadar, iata ca am ajuns in miezul problemei: cum accesez o baza de date in PHP si ce pot face cu ea?

Sa pornim de la configuratia serverului de baze de date. Exista bineinteles, mai multe variante de software pe care le putem instala, dar cel mai ieftin si popular este MySQL, deoarece permite oricarui utilizator sa-si instaleze gratuit si sa foloseasca pachetul Community. Dupa ce s-a instalat, avem nevoie sa setam un user/pass de root, care va avea drepturi depline asupra serverului MySQL. Pe langa acest user, ar fi indicat sa existe si altul, cu drepturi limitate, si specifice activitatii pe care trebuie sa o desfasoare. Pentru conectarea la server, avem nevoie doar de host, dat prin IP (sau "localhost" daca dorim sa scriem scripturi pe care le testam doar local), username si password. Portul implicit este 3306.

Pentru inceput, vrem sa afisam un mesaj daca ne-am conectat la baza de date. Editati un fisier connect.php

$link = mysql_connect("localhost:3306", "me", "God");
if (!$link) {
die(mysql_error());
}

echo "M-am conectat!"
mysql_close($link);
?>

$link este o variabila "resursa", si care tine minte starea conexiunii. E similara unui file pointer, cu care se face accesul la fisier. In cazul de fata, fiecare comanda va avea nevoie de o resursa pe care sa lucreze -> linkul la baza de date. In general e bine sa inchideti linkul daca nu este folosit, pentru ca altfel va fi deschis pana cand se face timeout sau scriptul php face die(), comanda care intrerupe executia interpretorului si se iese din script. MySQL dispune de doua functii care ajuta la debugging, in caz ca apar erori, deoarece altfel ar trebui afisate mesaje dupa fiecare linie (interpretorul se opreste la fiecare operatie care da eroare, lucru care face debugging dificil). Este vorba de mysql_error() care intoarce mesajul de eroare, si mysql_errno(), care intoarce doar codul erorii.

Urmatorul pas este fie deschiderea unei baze de date de pe server, fie... crearea uneia, deoarece initial nu avem cum sa stocam tabele. Exista mai multe moduri de creare a unei baze de date:

* printr-un mysql_query ce contine comanda SQL de creare
* prin mysql_create_db, cu sintaxa similara

Recomand sa consultati documentatia MySQL aferenta pentru limbajul de definire date, sau manipulare date, deoarece este foarte utila cand nu se stie exact cum arata o comanda. Vom crea o baza de date noua, si o vom selecta ca fiind cea activa pentru orice operatie ulterioara.

$link = mysql_connect('localhost', 'me', 'God');

$sql = 'CREATE DATABASE cadouri';
if (mysql_query($sql, $link)) {
echo "Ok!\n";
} else {
echo mysql_error()."\n";
} mysql_close($link); ?>

Se observa cum arata forma cea mai simpla a comenzii SQL de creare DB, si operatorul . folosit la concatenarea mesajului de eroare cu un endline. In mod similar se creeaza o tabela in baza de date, dupa ce este selectata mai intai ca default, cu mysql_select_db

Si ultimul pas reprezinta obtinerea informatiei, in urma efectuarii unui query. Exista o comanda speciala de query, mysql_query, care intoarce un alt fel de resursa-rezultat, si care poate fi accesata in mai multe moduri. PHP permite atat arrays obisnuite, cat si asociative, pe baza de key. Exact acest feature este exploatat si de functiile mysql_fetch_row si mysql_fetch_assoc

$result = mysql_query("SELECT id,cadou FROM cadouri WHERE luna = 'Decembrie'");
if (!$result) {
die(mysql_error());
}
$row = mysql_fetch_row($result);

echo $row[0]; // 4
echo $row[1]; // trenulet

In acest mod puteti realiza orice operatie doriti cu baza de date, deoarece sunt doar doua tipuri de query: care intorc informatie, sau care fac o operatie asupra bazei de date/tabela/etc.

Va urez conectare placuta!

Referinte:

* http://www.php.net/download-docs.php
* http://dev.mysql.com/downloads/mysql/5.0.html

Niciun comentariu: