Lectia 7 : Conectarea la o baza de date din PHP
de Cristi, PHPRomania
PHP permite conectarea la diferite baze de date printre care:
Cea mai frecventa combinatie o reprezinta PHP si MySQL pe care o vom prezenta in aceasta lectie.
Introducere
MySQL reprezinta o baza de date relationala oferita gratuit, disponibila atat pentru Windows, cat si pentru Linux. Este folosita in realizarea aplicatiilor mici si medii.
Ideea pe care se bazeaza interactiunea PHP - MySQL sau in general interactiunea dintre PHP si o baza de date este aceea ca permite ca informatiile care se doresc sa apara pe site sa fie prezente in baza de date. In acest fel informatiile pot fi actualizate usor si prezentate intr-o forma "dinamica" in cadrul site-ului.
Conectarea la baza de date
Vom incepe prin a ne conecta la o baza de date MySQL.
mysql_connect(adresa, utilizator, parola);
Ca si parametri vom folosi adresa care reprezinta IP-ul sau hostname-ul calculatorului pe care am instalat baza de date MySQL. Acesta poate fi acelasi cu cel pe care ruleaza serverul de web (de obicei Apache sau IIS) sau un alt calculator. In cazul in care se gaseste pe acelasi calculator cu serverul de web, putem folosi la adresa si localhost. Numele de utilizator si parola vor fi cele setate pentru MySQL. Implicit acestea sunt nume de utilizator: root si fara parola. Este recomandat ca aceste setari implicite sa fie modificate.
Functia mysql_connect returneaza un numar de identificare a conexiuni in caz de succes sau false in caz de eroare
<?php $id = mysql_connect("localhost", "root", "") or die("Nu ma pot conecta la MySQL!"); print ("Conectare reusita"); mysql_close($id); ?> |
Atentie o conexiune la baza de date trebuie deschisa intotdeauna inainte de a o folosi!
In cazul in care nu ne putem conecta la baza de date functia mysql_connect va returna false, iar in acest caz se va trece la executarea functiei die care va afisa mesajul din paranteza si va termina executia scriptului.
Urmatorul pas il reprezinta alegerea bazei de date
mysql_select_db(baza_de_date, identificatorul_conexiunii);
Parametrii folositi in acest caz vor fi numele bazei de date ales si identificatorul returnat de catre mysql_connect.
<?php $id = mysql_connect("localhost", "root", "") or die("Nu ma pot conecta la MySQL!"); $db = mysql_select_db("curs", $id) or die("Nu gasesc o baza de date cu numele curs!"); mysql_close($id); ?> |
In exemplul de mai sus am selectat baza de date curs. Ca si in exemplul anterior, in cazul in care nu putem selecta baza de date curs se va trece la executia functiei die a carui comportament a fost explicat mai sus.
Inserarea unei inregistrari in baza de date
In exemplul urmator vom insera intr-o baza de data o inregistrare. Pentru aceasta vom folosi functia mysql_query cu ajutorul careia vom executa o instructiune SQL.
mysql_query(instructiune_SQL, identificatorul_conexiunii);
Aceasta instructiune (in cazul nostru <<INSERT INTO cursanti(nume) VALUES('$nume')>>) va fi transmisa serverului MySQL care il va executa si va returna rezultatul. In cazul mysql_query rezultatul va fi true, in caz de succes, sau false, in caz de eroare.
Pentru a testa exemplul urmator va trebui sa creati un fisier cu numele "adauga_nume.php". Acest fisier va afisa in browser un formular cu o linie in care va puteti introduce numele si un buton care in momentul in care este apasat va transmite numele mai departe. Dupa cum se observa am setat formularului la actiune valoarea "adauga_nume.php", ceea ce inseamna ca valoarea va fi transmisa spre acelasi fisier.
Dupa ce valoarea este transmisa, executia va continua si in interiorul instructiunii if, executie care initial a fost ignorata, deoarece variabila $nume nu exista in cazul primei executii.
<?
if($nume) {
$idSQL = mysql_connect("localhost", "root", "");
mysql_select_db("curs", $idSQL);
$query = "INSERT INTO cursanti(nume) VALUES('$nume')";
mysql_query($query, $idSQL);
print("Numele dvs a fost introdus in baza de date!");
}
?>
<form method="POST" action="adauga_nume.php">
Numele dvs:
<input type="text" name="nume" size="30">
<input type="submit" value="Adauga"></form> |
Atentie: In unele cazuri este necesar sa se foloseasca variabila $HTTP_POST_VARS['nume'] in momentul in care se doreste preluarea variabilei nume transmisa prin metoda POST prin intermediul formularului.
Selectarea inregistrarilor
Dupa ce am inserat o inregistrare in baza de date dorim sa o afisam in browser. De aceea vom incerca sa vedem daca in tabela cursanti exista un utilizator cu numele Cristi. Pentru aceasta construim o instructiune sql de tipul celei de mai jos. Instructiunea mysql_num_rows returneaza numarul de rezultate returnate de executia instructiunii. Se poate observa ca in cazul in care se foloseste instructiunea mysql_query cu o instructiune SELECT, acesta nu va returna true sau false, ci va returna o lista de rezultate sau false in caz de eroare.
$query = "SELECT * FROM cursanti WHERE nume='Cristi'";
$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result))
{
print("<strong>Numele Cristi exista in tabela cursanti</strong>");
}
else
{
print("<strong>Numele Cristi nu exista in tabela cursanti</strong>");
} |
Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.
In urmatorul exemplu dorim sa afisam toate inregistrarile din tabela cursanti. Vom proceda ca si in exemplul anterior. Insa in cazul in care gasim rezultate in tabela cursanti vom parcurge fiecare din aceste rezultate si il vom afisa pe ecran.
mysql_fetch_row(rezultatul_returnat_de_mysql_query);
Instructiunea mysql_fetch_row va parcurge rezultatul returnat de instructiunea mysql_query si va returna pentru fiecare inregistrare un tablou care contine fiecare camp returnat. Indexarea tablourilor incepe de la valoare 0. Instructiune while va avea ca efect returnarea pentru fiecare linie a unui tablou. In cazul nostru vom avea in $row[0], numele cursantului.
$query = "SELECT nume FROM cursanti";
$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("$row[0]<br>");
}
} else {
print "Tabela cursanti este goala !";
} |
Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.
In urmatorul exemplu vom selecta dintr-o tabela toti cursanti a caror nume incep cu litera c. Pentru aceasta vom folosi o instructiune SQL mai complexa. Portiunea <nume LIKE 'c%'> din interiorul instructiunii SQL se traduce prin toate inregistrarile a caror camp nume incepe cu litera c. Semnul % inseamna orice numar de caractere chiar si nici unul.
In acest exemplu am selectat pe langa nume si campul email, pe care il afisam prin intermediul lui $row[1].
$query = "SELECT nume,email FROM cursanti WHERE nume LIKE 'c%'";
$result = mysql_query($query, $idSQL);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_row($result))
{
print("$row[0]");
print("$row[1]<br>");
}
} else {
print "Tabela cursanti este goala !";
} |
Atentie: Trebuie sa fiti conectati la baza de date inainte de a executa instructiunea SQL.
Actualizarea unei inregistrari
In urmatorul exemplu vom actualiza toate inregistrarile care contin emailul test@asp.net cu test@asp.net. In cazul nu exista nici un utilizator care sa posede adresa de email test@asp.net, tabela va ramane nemodificata.
$query = "UPDATE cursanti SET email='test@php.net' WHERE email='test@asp.net'";
mysql_query($query, $idSQL); |
Stergerea unei inregistrari
Urmatorul exemplu permite stergerea tuturor inregistrarilor din tabela cursanti care au emailul test@php.net.
$query = "DELETE FROM cursanti WHERE email='test@php.net'";
mysql_query($query, $idSQL); |
Final
Este recomandat ca dupa fiecare selectie a unor inregistrari din cadrul tabelei prin instructiunea SQL SELECT sa se foloseasca instructiunea mysql_free_result. Aceasta permite eliberarea resurselor asociate variabilei $result.
mysql_free_result($result); |
In cadrul acestui tutorial am folosit o tabela de forma:
CREATE TABLE cursanti(
id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT,
nume varchar(50),
email varchar(50),
PRIMARY KEY (id)); |
Tema de casa
Realizati o tabela care sa contina campurile: nume, prenume, adresa, oras, judet.
Cerintele sunt urmatoarele:
- inserati prin intermediul unui formular noi inregistrari in tabela
- afisati in browser toti utilizatorii care sunt din Bucuresti
- afisati in browser toti utilizatorii care sunt dintr-un judet care incepe cu litera T
Resurse
www.php.net - site-ul oficial al limbajului PHP
www.mysql.com - site-ul oficial MySQL
www.phpromania.as.ro - Site-ul Comunitatatii PHP din Romania
|