Conectarea la o baza de date din PHP de Anonim 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.net - Site-ul
Comunitatatii PHP din Romania
Sus |