Sunteți pe pagina 1din 21

Baze de date & PHP

1. Conectarea la serverul MySQL


Pentru a utiliza o baza de date MySQL, avem nevoie de o conexiune la serverul de baze de date. Aceasta conexiune va fi utilizata ca punct de access pentru comenzi mysql. Pentru a va conecta la un server MySQL, utilizati functia mysql_connect !, a carei sintaxa este urmatoarea" mysql_connect (nume_gazda nume_ut!l!zator "arola# #nde $nume_%azda$ este numele %azdei, serverul pe care ruleaza serviciul MySQL, $nume_utilizator$ este numele utilizatorului care se conecteaza la serverul MySQL, iar $parola$ este parola MySQL asociata utilizatorului. &n cazul in care serverul MySQL ruleaza pe calculatorul personal, parametrul $nume %azda$ este in %eneral $local$ost$. &n alte cazuri, daca serverul MySQL ruleaza pe un alt computer, va trebui sa specificati adresa computerului pe care ruleaza serverul MySQL. 'unctia returneaza 'ALS( )n caz de esec* )n caz contrar, returneaza o valoare denumita identificator de le%atura, care serveste ca instrument de manipulare pentru accesul la serverul MySQL. (exemplu de utilizare a functiei mysql_connect !"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% print "&onnected to !y"#$ < r '("% ?(

&n acest exemplu, serverul MySQL ruleaza pe $local+ost$ ca si modulul P,P, utilizatorul este $root$ iar parola $-./0$. 1upa executia acestui script, daca nu se reuseste conectarea la MySQL, va aparea mesa2ul $#nable to connect to MySQL$, in caz de reusita, apare mesa2ul $3onnected to MySQL$ 4n mod prestabilit, functia mysql_connect ! se conecteaza la serviciul MySQL prin intermediul portului //56, portul MySQL standard. 1aca doriti sa obtineti accesul la un server MySQL care ruleaza pe un port non7standard, puteti atasa un caracter doua puncte si numarul portului dorit la ar%umentul care contine numele %azdei* de exemplu, $local+ost"//58$.

%. &nc$e!erea cone'!un!! la serverul MySQL


Pentru terminara unei conexiuni la serverul MySQL se foloseste instructiunea" mysql_close(#(

Baze de date & PHP Aceasta functie inc+ide conexiunea curenta. 'unctia returneaza 9:#( )n caz de reusita* )n caz contrar, returneaza 'ALS(. 4n %eneral, nu este necesara invocarea functiei mysql_close !, deoarece P,P )nc+ide automat conexiunile desc+ise cu bazele de date atunci c;nd un script )si )nc+eie executia. &ata un exemplu de conectare la serverul MySQL si inc+idere a conexiunii folosind functia mysql_close !"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% '' )ici ada*+ati datele necesare l*cr*l*i c* ser,er*l !y"#$ mysql_close()% ?(

). *etectarea a"ar!t!e! eror!lor


<iblioteca MySQL din P,P furnizeaza doua functii de verificare a erorilor, si anume mysql_errno(# si mysql_error(#. 'iecare functie returneaza un rezultat care reflecta eroarea, daca aceasts exista. =ici una din cele doua functii nu necesita ar%umente. 'unctia mysql_errno ! returneaza un cod numeric de eroare, )n timp ce functia mysql_error ! returneaza un sir care descrie eroarea. 1aca nu s7a produs nici o eroare, codul numeric al erorii este zero si descrierea are ca valoare un sir vid. &nformatiile de eroare sunt disponibile numai daca este activa o conexiune cu serverul MySQL. Prin urmare, intai trebuie sa se reuseasca conectarea la MySQL. &ata cum puteti folosi functiile respective pentru a verifica modul de operare a functiei mysql_select_db ! aceasta selecteaza baza de date pentru lucru!"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% print "&onnected to !y"#$< r '("% mysql_select_d ("test")% i- (mysql_error()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()% 1 ?(

1aca se reuseste conexiunea la serverul MySQL si baza de date cu numele $test$ este inexistenta, rezultatul afisat de exemplul de mai sus va fi urmatorul" 3onnected to MySQL -50> " #n?no@n database AtestA

+l!m!narea mesa,elor de eroare s! a avert!smentelor nedor!te

Baze de date & PHP =umeroase functii P,P pot produce erori sau mesa2e de avertizare care )i pot deruta pe utilizatorii siturilor Beb sau le pot cauza neplaceri. P,P furnizeaza functia error_reportin% !, care va permite sa eliminari mesa2ele nedorite. 'unctia are urmatoarea forma" error_re"ort!ng(mas-# unde $mas?$ specifica tipul mesa2elor care vor fi raportate. 1aca specificati zero ca valoare a atributului $mas?$ error_reportin% 5!!, nu va fi raportat nici un mesa2. 1aca specificati $(_ALL$ in loc de $mas?$ error_reportin% (_ALL!!, vor fi raportate toate mesa2ele. Sau, o alta metoda pentru oprirea mesa2elor de eroare, explicata in lectiile anterioare, este adau%and C inaintea functiei.

.. Crearea s! selectarea une! /aze de date.


D functie importanta in lucrul cu bazele de date este mysql_query !, care are urmatoarea forma" mysql_query(0!nterogare0# sau mysql_query(0!nterogare0 0!d_con0# 7 $intero%are$ este un sir ce contine comenzile SQL care urmeaza a fi executate in P,P, comenzile SQL nu trebuie sa se )nc+eie cu un caracter punct si vir%ula!. 7 $id_con$ este identificatorul de conectare returnat de functia mysql_connect !, daca acesta este omis se foloseste ultima le%atura desc+isa cu aceasta functie. 'unctia mysql_query ! returneaza 9:#( daca serverul a reusit sa execute intero%area* )n caz contrar, returneaza 'ALS(. 7 Pentru ca sa puteti lucra cu baze de date in P,P trebuie sa cunoasteti comenzile SQL necesare. Pentru a crea o noua baza de date folosim comanda SQL $3:(A9( 1A9A<AS( nume<aza1e1ate*$, pe care o putem lansa de la o consola MySQL, sau o putem apela de la un script P,P prin intermediul functiei mysql_query !. (xemplu de creare a unei baze de date $test$"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $created = mysql_q*ery("&23)43 5)4)6)"3 test")% i- ($created ) echo "6a7a de date 43"4 a -ost creata < r '("% else echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()% mysql_close()% ?(

Baze de date & PHP 7 1upa executarea acestui script, daca totul este corect, va fi creata baza de date $test$ si va fi afisat mesa2ul $<aza de date 9(S9 a fost creata$. 1upa ce pro%ramul a obtinut o conexiune cu serverul MySQL, inainte de a lucra cu tabelele dintr7o baza de date MySQL, pro%ramul trebuie sa selecteze baza de date respectiva. Pentru aceasta, folositi functia mysql_select_db !, care are urmatoarea forma" mysql_select_d/(/aza_de_date# #nde $baza_de_date$ este numele bazei de date la care urmeaza a se obtine acces. 'unctia returneaza 9:#( daca poate obtine accesul la baza de date, respectiv 'ALS( )n caz contrar. (xemplu de selectare a bazei de date $test$"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $selectd = mysql_select_d (8test8)% i- ($selectd ) echo "6a7a de date test a -ost selectata < r '("% else echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()% mysql_close()% ?(

1. Crearea ta/elelor
1upa conectare si selectarea bazei de date putem crea tabele in cadrul bazei de date selectate. Pentru aceasta folosim limba2ul SQL 3:(A9( 9A<L( nume9abel coloana-, coloana., ...!* impreuna cu functia mysql_query !. &n exemplul urmator cream tabelul cu numele $carti$ care contine urmatoarele campuri" 2ume cam" id nume autor %en data_intrare pret 3!" &dentificator unic, =ot =ull, c+eie primara 3+ar /5! 3+ar .E! 3+ar -5! 1ate 1ecimal -.,.!

&n stan%a, la $=ume 3amp$, sunt trecute coloanele tabelului, iar in dreapta tipul acestora, coloana cu nume $id$ fiind c+eia primara.

Baze de date & PHP 1e asemenea, folosim indicatorul $A#9D_&=3:(M(=9$ pentru a preciza faptul ca MySQL va repartiza o valoare secventiala unica )n coloana care serveste drept c+eie primara a tabelului. Scriptul P,P pentru crearea tabelului este"
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $selectd = mysql_select_d (8test8)% i- (9$selectd ) echo "6a7a de date test n* a p*t*t -i selectata deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% $sql = "&23)43 4)6$3 :carti: (id ;<4 U<";=<35 )U4>_;<&23!3<4 ?2;!)2@ A3@, n*me ,archar(3B) <>4 <U$$, a*tor ,archar(2C) , +en ,archar(1B) <>4 <U$$, data_intrare date, pret decimal(12,2))"% i- (mysql_q*ery($sql, $conn)) echo "4a el*l carti a -ost creat < r '("% else echo "4a el*l carti n* a p*t*t -i creat deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% mysql_close()% ?(

&n exemplul de mai sus, variabila $Fsql$ contine comanda SQL pentru crearea acestui tabel. &nstructiunea mysql_query Fsql, Fconn!, executa aceasta comanda si in cazul in care rezultatul este 9:#( se trimite la iesire sirul" $9abelul carti a fost creat$. &n cazul in care instructiunea SQL nu a putut fi executata, functia mysql_query Fsql! intoarce valoarea 'ALS(, afisand eroarea din cauza careia tabelul nu a putut fi creat.

4. 5daugarea de date !n ta/el


1upa ce aveti tabelul creat in baza de date MySQL puteti adau%a date in el, pentru aceasta se foloseste functia mysql_query $intero%are$! unde $intero%are$ este urmatoarea comanda" &2S+63 &237 8nume_ta/el8 (coloana1 coloana% ...# 95L:+S (;date1; ;date%; ...# unde" 7 Gnume_tabelG este numele tabelului in care se adau%a datele 7 $coloana-, coloana., ...$ sunt numele coloanelor in care se doreste adau%area datelor 7 $date-, date., ...$ sunt datele care vor fi adau%ate, tinandu7se cont de ordinea si numarul lor cu cea a coloanelor &ata un exemplu, in care se foloseste tabelul $carti$ creat mai sus"

Baze de date & PHP


<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $selectd = mysql_select_d (8test8)% i- (9$selectd ) echo "6a7a de date test n* a p*t*t -i selectata deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% $sql = ";<"324 ;<4> :carti: (n*me, a*tor, +en, data_intrare, pret) D)$U3" (8=lossa8, 8!ihai 3minesc*8, 8poe7ie8, 81EFBCF2BBE8, 8G8)"% i- (mysql_q*ery($sql, $conn)) echo 85atele a* -ost ada*+ate8% else echo "5atele n* a* -ost ada*+ate deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% mysql_close()% ?(

7 &n acest exemplu, datele $AHlossaA, AMi+ai (minescuA, ApoezieA, A->75E7.55>A, A8A$ vor fi adau%ate in coloanele $nume, autor, %en, data_intrare, pret$ in aceeasi ordine in care sunt scrise si datele si coloanele. 7 1aca au fost adau%ate cu succes, apare mesa2ul $1atele au fost adau%ate$, in caz contrar apare mesa2ul de eroare. 1aca doriti sa adau%ati mai multe linii in tabel, printr7o sin%ura intero%are, puteti folosi urmatorul model"
<?php '' )ici ada*+ati comen7ile pt/ conectare si selectarea a7ei de date $sql = ";<"324 ;<4> :n*me_ta el: (coloana1, coloana2, coloana3) D)$U3" (8date18, 8date28, 8date38), (8,aloare18, 8,aloare28, 8,aloare38), (8teHt18, 8teHt28, 8teHt38)"% i- (mysql_q*ery($sql)) echo 85atele a* -ost ada*+ate8% else echo "5atele n* a* -ost ada*+ate deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% mysql_close()% ?(

<. Cautare !n ta/el MySQL

Baze de date & PHP 1upa ce au fost adau%ate mai multe date randuri! intr7un tabel MySQL, se poate selecta anumite randuri si coloane cautand dupa un anumit termen sau cuvant. Pentru aceasta se foloseste comanda =H+6+.

a. Cautare du"a valoarea coloane!


&ntr7un tabel MySQL daca dorim sa fie selectate doar acele randuri in care o colana are o anumita valoare, se adau%a in comanda SQL formula" B,(:( GcoloanaGIAvaloareA , dupa cum se vede in urmatorul exemplu. &n acest exemplu vor fi selectate doar randurile din coloanele $col-$ si $col.$ unde $col-$ are o anumita valoare fixa precizata.
<?php '' "e -ace conectarea la !y"#$ si selectarea a7ei de date $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $selectd = mysql_select_d (8test)% i- (9$selectd ) echo "6a7a de date n* a p*t*t -i selectata0 "/ mysql_errno()/ " 0 "/ mysql_error()% $,al = 8c*,ant8% '' Daria ila ce contine ,aloarea pt/ coloana ca*tata $sql = ""3$3&4 :col1:, :col2: I2>! :ta el: JK323 :col1:=8$,al8"% $re7*ltat = mysql_q*ery($sql, $conn)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (mysql_n*m_roLs($re7*ltat) == B) . echo 8B re7*ltate8% 1 else . '' ?arc*r+e si a-isea7a rand*rile +asite Lhile ($rand = mysql_-etch_assoc($re7*ltat)) . echo 8< r '(8/ $randM8col18N/ 8 F 8/ $randM8col28N% 1 1 ?(

7 $col-$ si $col.$ sunt coloanele din $tabel$ care vrem sa fie selectate. Puteti adau%a mai multe nume separate prin vir%ula!, sau pentru a selecta toate coloanele, se foloseste caracterul J Pe lan%a formula $B(:($ pot fi folosite si comenzile 52* si! sau 76 sau!, pentru a efectua selecturi mai complexe, sau mai precise, cautand randurile in functie de valorile mai multor coloane. 7 1e exemplu, daca se doreste selectarea doar a randurilor in care avem $col-$ cu valoarea $val-$ si $col.$ cu valoarea $val.$* randul selectat sa indeplineasca ambele conditii, se foloseste comanda SQL cu A=1 astfel"

Baze de date & PHP


$sql = ""3$3&4 :col1:, :col2: I2>! :ta el: JK323 :col1:=8$,al18 )<5 :col2:=8$,al28"%

7 1aca se doreste selectarea randurilor in care avem $col-$ cu valoarea $val-$ sau $col.$ cu valoarea $val.$* randul selectat sa indeplineasca una oricare! din aceste conditii, se foloseste comanda SQL cu D: astfel"
$sql = ""3$3&4 :col1:, :col2: I2>! :ta el: JK323 :col1:=8$,al18 >2 :col2:=8$,al28"%

/. Cautare du"a un anum!t termen !n rand


D alta selectare necesara este atunci cand se doreste cautarea randurilor care au in datele din coloana un anumit termen sau cuvant. Pentru aceasta se folosesc impreuna comenzile =H+6+ si L&>+. Se adau%a la 1e exemplu" comanda SQL formula" B,(:( GcoloanaG L&K( AtermenA

$sql = ""3$3&4 :col1:, :col2: I2>! :ta el: JK323 :col1: $;A3 8$term8"%

7 Laloarea lui AFtermA poate fi un cuvant sau fraza exacta, ori o parte dintr7un cuvant, in acest caz se foloseste si caracterul $M$, astfel, pot fi obtinute urmatoarele 0 cazuri" ;term; 7 va returna randurile in care valoarea coloanei este exact cuvantul $term$, fara altceva. ;term?; 7 va %asi randurile in care valoarea coloanei incepe cu $term$, cum ar fi" $term ceva$, $termenii$, etc. ;?term; 7 va %asi randurile in care valoarea coloanei se termina cu $term$, cum ar fi" $-.term$ $ceva term$, etc. ;?term?; 7 va returna randurile in care coloana are in valoarea ei oriunde, si in interiorul continutului! termenul $term$, cum ar fi" $term ceva$ $ceva -.termeni$, $ceva ex7terma altceva$, etc. 1e obicei, termenul cautat este preluat dintr7un formular. 9rebuie sa tineti cont de modul in care au fost adau%ate datele in tabelul MySQL, daca au fost filtrate cu o functie, precum $mysql_real_esca"e_str!ng(#0 cand se face selectul pentru cautare trebuie aplicata aceeasi functie termenului cautat. 7 Mai 2os puteti studia si folosi codul unui model de script, cu formular, pentru selectarea dintr7un tabel MySQL a randurilor in care se %aseste termenul transmis prin formular. (xplicatiile detaliate sunt in codul scriptului.
<'head( < ody( <-orm action="" method="post"(

Baze de date & PHP


<inp*t type="teHt" name="term" '( <inp*t type="s* mit" name="s* mit" ,al*e="&a*ta" '( <'-orm( <?php '' "e ,eri-ica daca e primita ,aloare de la -orm*lar si are mai m*lt de 1 caracter i- (isset($_?>"4M8term8N) OO strlen($_?>"4M8term8N)(1) . '' ?reia ,aloarea, eliminand posi ile spatii eHterioare $term = trim($_?>"4M8term8N)% '' "e -ace conectarea la ser,er*l !y"#$ si selectarea a7ei de date $conn = mysql_connect("adresa"er,er!y"#$", "*tili7ator", "parola") or die("<* mFam p*t*t conecta la ser,er*l !y"#$")% $selectd = mysql_select_d (8 a7a_date8)% i- (9$selectd ) echo "6a7a de date n* a p*t*t -i selectata0 "/ mysql_errno()/ " 0 "/ mysql_error()% '' "e ,eri-ica daca "ma+ic_q*otes_+pc()" este setat >< '' 5aca e ><, se aplica stripslashes() pentr* a n* se ada*+a de 2 ori "P" la -iltrare i-(+et_ma+ic_q*otes_+pc()) . $term = stripslashes($term)% 1 '' "e aplica -iltrarea c* mysql_real_escape_strin+() (la ada*+area datelor ''tre *ie sa -i -ost -olosita aceeasi -iltrare) $term = mysql_real_escape_strin+($term)% '' "e -ace selectarea si a-isarea dateor ret*rnate $sql = ""3$3&4 Q I2>! :n*me_ta el: JK323 :n*me_coloana: $;A3 8R$term R8"% $resql = mysql_q*ery($sql, $conn) or tri++er_error(3_U"32_322>2)% i- (mysql_n*m_roLs($resql) == B) . echo 8B re7*ltate8% 1 else . Lhile ($rand = mysql_-etch_assoc($resql)) . '' 3limina caracterele "P" care a* -ost ada*+ate de "mysql_real_escape_strin+()" $col = stripslashes($randM8n*me_coloana8N)% echo 8< r '(8/ $col% 1 1 1 ?( <' ody( <'html(

Baze de date & PHP

c. 9er!@!carea !nterogar!lor care nu returneaza rAndur! de ta/el


1in punctul de vedere al limba2ului P,P, exista doua cate%orii de intero%ari SQL, ambele fiind emise folosind functia mysql_query(#. &ntero%arile S(L(39, care returneaza r;nduri ale unui tabel &ntero%arile #P1A9(, &=S(:9 si 1(L(9(, care nu returneaza r;nduri ale unui tabel Pentru a verifica daca o intero%are #P1A9(, &=S(:9 sau 1(L(9( a avut efectul dorit, puteti folosi functia mysql_a@@ected_roBs(# care returneaza numarul r;ndurilor afectate de intero%area cea mai recenta. D alta functie utila este mysql_!nsert_!d(#. 3and introduceti un rand intr7un tabel a carui c+eie primara este de tipul A#9D_&=3:(M(=9, functia mysql_insert_id ! determina valoarea c+eii primare atribuite de MySQL. 'unctia returneaza valoarea zero daca intero%area precedenta nu a %enerat o valoare A#9D_&=3:(M(=9. 3a atare, functia trebuie apelata la putin timp dupa intero%area care a inserat r;ndul in tabel, astfel )nc;t o alta intero%are ulterioara sa nu modifice rezultatul. &ata un exemplu de utilizare a functiilor mysql_affected_ro@s ! si mysql_insert_id ! impreuna cu itero%area &=S(:9 care adau%a randuri in tabel!. 'olosim baza de date $test$ si tabelul $carti$.
<?php $conn = mysql_connect( "localhost", "root", "1234") or die("Una le to connect to !y"#$")% $selectd = mysql_select_d (8test8)% i- (9$selectd ) echo "6a7a de date test n* a p*t*t -i selectata deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% $sql = ";<"324 ;<4> :carti: (n*me, a*tor, +en, data_intrare, pret) D)$U3 (8&arte28, 8)*tor28, 83d*cati,8, 82BBGFEF1S8, 11/BB)"% i- (mysql_q*ery($sql)) echo "5atele a* -ost ada*+ate in ta el*l carti < r '("% else echo "5atele n* a* -ost ada*+ate in ta el*l carti deoarece 0 "/ mysql_errno()/ " 0 "/ mysql_error()% $nrand*ri = mysql_a--ected_roLs()% $id = mysql_insert_id()% i- ($nrand*ri == F1) . echo ";<"324 n* a p*t*t sa ada*+e datele"% 1 else echo ")* -ost ada*+ate $nrand*ri rand*ri, cheia primara = $id" %

Baze de date & PHP


mysql_close()% ?(

1upa ce s7a facut conectarea la serverul MySQL si s7a reusit selectarea bazei de date, variabila $Fsql$ contine comanda SQL pentru introducerea unui nou rand in tabelul $carti$, prin intermediul functiei mysql_query Fsql! se introduce datele in baza de date, variabila $Fnranduri$ preia de la functia mysql_affected_ro@s ! numarul de randuri afectate aici introduse! iar variabila $Fid$ va avea prin $mysql_insert_id !$! valoarea c+eii primare atribuite de MySQL. 1aca nu apare nici o eroare, rezultatul afisat de acest script este urmatorul" 1atele au fost adau%ate in tabelul carti Au fost adau%ate - randuri, c+eia primara I . 'unctia mysql_!nsert_!d(# poate returna un rezultat incorect pentru coloanele MySQL de tipul <&H&=9 N<&H&=9 este un tip de valoare care suporta numere cu .5 de cifre, folosit pentru campurile inte%er spre deosebire de M(1&#M&=9 care suporta numere de la 5 la -6.OOO..-E / bytes! sau &=9 care suporta numerele de la 5 la 0..>0.>6O..>E 0 bytes!P. 1upa efectuarea unei intero%ari &=S(:9, &n locul functiei mysql_insert_id ! se poate folosi functia L5S3_&2S+63_&*(# aceasta returneaza valoarea atribuita de MySQL unei coloane A#9D_&=3:(M(=9, indiferent de tipul coloanei. Mai mult, apelurile ulterioare in script la functii MySQL nu afecteaza rezultatul returnat de L5S3_&2S+63_&*(# care este afectat numai de operatiile &=S(:9 )n care sunt implicate coloane A#9D_&=3:(M(=9. 9otusi, spre deosebire de $mysql_insert_id !$, LAS9_&=S(:9_&1 ! necesita o intero%are suplimentara la MySQL. &ata un exemplu care prezinta modul de obtinere a valorii LAS9 &=S(:9 &1 !"
<?php $sql = ";<"324 ;<4> :carti: (n*me, a*tor, +en, data_intrare, pret) D)$U3 (8&arte38, 8)*tor38, 8=en38, 82BBGFEF1S8, G/3B)"% $insert = mysql_q*ery($sql)% i- (9$insert) . echo "< r '( &manda ;<"324 a es*at0 "/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $intero+are = ""3$3&4 $)"4_;<"324_;5() I2>! :carti:"% $re7*ltat = mysql_q*ery($intero+are)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $rand = mysql_-etch_roL($re7*ltat)% echo "< r '( Ultim*l ;5 reparti7at0 $randMBN"% mysql_close()% ?(

Baze de date & PHP 1upa executarea acestui script, daca nu apare vreo eroare, rezultatul afisat va fi de %enul" #ltimul &1 repartizat" / 'unctia last_!nsert_!d(# returneaza rezultatul corect numai dupa ce a fost efectuata o comanda &=S(:9. 'unctia mysql_a@@ected_roBs(# numara numai r;ndurile efectiv modificate de catre o intero%are #P1A9(. :;ndurile )n cazul carora vec+ea si noua valoare din coloana sunt identice nu se numara printre r;ndurile afectate. 1e asemenea, o intero%are 1(L(9( care nu contine o clauza B,(:( va determina functia mysql_a@@ected_roBs(# sa returneze valoarea zero, indiferent de numarul r;ndurilor sterse din tabel. D modalitate simpla de a determina daca ster%erea tuturor r;ndurilor unui tabel a reusit consta )n a emite o intero%are care returneaza numarul r;ndurilor existente )n tabel. 1e exemplu"
<?php $sql = ""3$3&4 &>U<4(Q) I2>! :carti:"% $res*lt = mysql_q*ery($sql)% $nr = mysql_-etch_roL($res*lt)% echo $nrMBN% ?(

1aca intero%area returneaza valoarea zero, demonstreaza ster%erea tuturor r;ndurilor din tabel.

d. Prelucrarea rezultatelor !nterogar!lor S+L+C3


&ntero%arile S(L(3 returneaza ca rezultate r;nduri de tabel. :;ndurile unui tabel sunt incluse )ntr7o structura de date numita $set de rezultate$. Prelucrarea setului de rezultate returnat de o intero%are S(L(39 implica parcur%erea r;ndurilor setului de rezultate. D modalitate de parcur%ere a r;ndurilor unui set de rezultate este prin utilizarea unei instructiuni $B,&L($. -. Se verifica daca numarul de randuri returnat este 5 folosind functia mysql_num_roBs(#, transfer;ndu7i ca ar%ument valoarea returnata de functia mysql_query(# .. 1aca numarul de randuri este 5 inseamna ca intero%area S(L(39 nu a returnat nici un rand din tabel, /. 1aca numarul de randuri este diferit de 5, se executa o instructiune B,&L( impreuna cu una din functiile"
o

mysql_@etc$_assoc(# sau mysql_@etc$_array(# cu parametru $MQSQL_ASSD3$!. 7 sunt similare, adau%a datele intr7o matrice asociativa unde pentru

Baze de date & PHP fiecare element avem c+ei cu numele coloanelor iar valoarile lor sunt datele din randul respectiv. o mysql_@etc$_roB(#. 7 adau%a datele intr7o matrice asociativa unde pentru fiecare element avem c+ei cu numere consecutive incepand de la 5! care reprezinta ordinea coloanelor iar valoarile lor sunt datele din randul respectiv o mysql_@etc$_o/,ect(#. 7 aduce rezultatele randului sub forma de obiect cu perec+ile CrandD Ecoloana 0. Pentru a prelucra coloanele stocate )n matrice, depinde de functia folosita. 7 pentru mysql_@etc$_assoc(# sau mysql_@etc$_array(#! puteti folosi o sintaxa de %enul CrandF;coloana;G 7 pentru mysql_@etc$_roB(# puteti folosi o instructiune $foreac+$, prin care parcur%eti datele din fiecare element a matricei 7 pentru mysql_@etc$_o/,ect(# puteti folosi o sintaxa de %enul CrandDE;coloana; 7 Aceste functii returneaza 'ALS( daca nu mai exista r;nduri )n setul de rezultate 1e exemplu, daca doriti sa aflati toate datele din anumite coloane puteti folosi functia mysql_fetc+_assoc ! astfel"
<?php $intero+are = ""3$3&4 :n*me:, :a*tor: I2>! :carti:"% $re7*ltat = mysql_q*ery($intero+are)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (mysql_n*m_roLs($re7*ltat) == B) . echo 8B re7*ltate8% 1 else . Lhile ($rand = mysql_-etch_assoc($re7*ltat)) . echo 8< r '(8/ $randM8n*me8N/ 8 F 8/ $randM8a*tor8N% 1 1 ?(

7 Lariabila $Frand$ devine o matrice ale carei c+ei sunt numele coloanelor iar valorile lor sunt datele coloanelor respective din randul curent* instructiunea B,&L( parcur%e fiecare rand. &ata acest exemplu, dar cu functia mysql_fetc+_array !. &n plus, in intero%are SQL voi adau%a numele coloanelor prin variabile, ca sa vedeti cum se lucreaza si cu variabile.
<?php '' Daria ilele c* n*mele coloanelor $col1 = 8n*me8% $col2 = 8a*tor8%

Baze de date & PHP


'' ;ntero+area "#$ -olosind si ,aria ile $intero+are = ""3$3&4 :$col1:, :$col2: I2>! :carti:"% $re7*ltat = mysql_q*ery($intero+are)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (mysql_n*m_roLs($re7*ltat) == B) . echo 8B re7*ltate8% 1 else . Lhile ($rand = mysql_-etch_array($re7*ltat, !@"#$_)"">&)) . echo 8< r '(8/ $randM8n*me8N/ 8 F 8/ $randM8a*tor8N% 1 1 ?(

3el de7al doilea ar%ument al functiei mysql_fetc+_array ! este optional. 9otusi, daca nu specificati MQSQL_ASSD3 ca valoare a ar%umentului, P,P returneaza un tablou in care valoarea c+eilor vor fi numerele si numele coloanelor. 7 3onform datelor adau%ate in tabelul $carti$, aceste doua exemple vor afisa urmatorul rezultat" Hlossa 7 Mi+ai (minescu 3arte. 7 Autor. 3arte/ 7 Autor/ 1aca doriti sa afisati toate datele din fiecare coloana de pe fiecare rand al tabelului, puteti folosi functia mysql_fetc+_ro@ ! astfel"
<?php $intero+are = ""3$3&4 Q I2>! :carti:"% $re7*ltat = mysql_q*ery($intero+are)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (mysql_n*m_roLs($re7*ltat) == B) . echo 8B re7*ltate8% 1 else . Lhile ($rand = mysql_-etch_roL($re7*ltat)) . -oreach ($rand as $coloana) . echo "T $coloana T"% 1 echo "< r '("% 1 1 ?(

(xemplul de mai sus va afisa urmatorul rezultat, in functie de datele din tabel"

Baze de date & PHP T 1 TT =lossa TT !ihai 3minesc* TT poe7ie TT BBBBFBBFBB TT G/BB T T 2 TT &arte2 TT )*tor2 TT 3d*cati, TT 2BBGFBEF1S TT 11/BB T T 3 TT &arte3 TT )*tor3 TT =en3 TT 2BBGFBEF1S TT G/3B T 1aca doriti sa obtineti acces la valoarea unei anumite coloane, puteti face referire la elementul din tablou folosind o c+eie a tabloului. 1e exemplu, daca rezultatul functiei mysql_fetc+_ro@ ! este stocat )n variabila $Frand$, puteti obtine acces la prima coloana folosind sintaxa $FrandN5P$, la a doua coloana folosind sintaxa $FrandN-P$ etc. &ata un exemplu in care este utilizata functia mysql_fetc+_ob2ect !, iar in intero%area SQL este adau%ata si o conditie B,(:( si o variabila $Fnr$.
<?php $nr = 3% $intero+are = ""3$3&4 :n*me:, :a*tor: I2>! :carti: JK323 :id:<8$nr8"% $re7*ltat = mysql_q*ery($intero+are)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (mysql_n*m_roLs($re7*ltat) == B) . echo 8B re7*ltate8% 1 else . Lhile ($rand = mysql_-etch_o Uect($re7*ltat)) . echo 8< r '(8/ $randF(n*me/ 8 F 8/ $randF(a*tor% 1 1 ?(

Baze de date & PHP

H. +'"lorarea Bazelor de *ate MySQL a. 7/t!nerea numarulu! coloanelor d!ntrDun ta/el MySQL
Pentru a obtine numarul coloanelor dintr7un set de rezultate, utilizati functia" mysql_num_@!elds(# Aceasta foloseste ca ar%ument valoarea returnata de functia mysql_query(#. &ata un exemplu in care functia mysql_num_fields ! determina numarul coloanelor dintr7 o intero%are care selecteaza toate coloanele folosind specificatorul SQL pentru toate c;mpurile $J$, astfel puteti afla numarul de coloane dintr7un tabel"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $nr_camp*ri = mysql_n*m_-ields($re7*ltat)% echo "< r '( <*mar camp*ri0 $nr_camp*ri"% mysql_close()% ?(

/. 7/t!nerea numelu! une! coloane


Pentru a obtine numele unei coloane dintr7un tabel MySQL, folositi functia mysql_@!eld_name(# Aceasta returneaza numele coloanei din setul de rezultate. 'unctia preia doua ar%umente" valoarea returnata de functia mysql_query ! si indexul coloanei care va fi descrisa. &ndexul asociat cu prima coloana este 5, indexul asociat celei de7a doua coloane este l etc. &ata un exemplu care determina numele primei coloane dintr7un tabel MySQL"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $n*me = mysql_-ield_name($re7*ltat, B)% echo "< r '( &oloana 1 0 $n*me"% mysql_close()% ?(

c. 7/t!nerea lung!m!! une! coloane


Pentru a obtine lun%imea unei coloane dintr7un tabel MySQL, folositi functia mysql_@!eld_len(#

Baze de date & PHP Aceasta returneaza lun%imea maxima a coloanei din setul de rezultate. 'unctia preia doua ar%umente" valoarea returnata de functia mysql_query ! si indexul coloanei care va fi descrisa. &ndexul asociat cu prima coloana este 5, indexul asociat celei de7a doua coloane este l etc. &ata un exemplu care determina lun%imea maxima a coloanei doi dintr7un tabel MySQL"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $l*n+ime = mysql_-ield_len($re7*ltat, 1)% echo "< r '( $*n+ime &oloana 2 F $l*n+ime"% mysql_close()% ?(

d. 7/t!nerea !nd!cator!lor MySQL asoc!at! une! coloane


Pentru a obtine indicatorii SQL asociati unei coloane dintr7un tabel MySQL, folositi functia mysql_@!eld_@lags(# Aceasta preia doua ar%umente" valoarea returnata de functia mysql_query(# si indexul coloanei care va fi descrisa. &ndexul asociat cu prima coloana este 5, indexul asociat celei de7a doua coloane este l etc. 'unctia mysql_@!eld_@lags(# raporteaza urmatorii indicatori" 5:37_&2C6+M+23 B&256I BL7B +2:M M:L3&PL+_>+I 273_2:LL P6&M56I_>+I 3&M+S35MP :2&Q:+_>+I :2S&J2+* K+67L&LL 7 1aca la o coloana sunt asociati mai multi indicatori, fiecare indicator este separat de vecinii sai prin intermediul unui sin%ur spatiu. &ata un exemplu care determina indicatorii asociati primei coloane dintr7un tabel MySQL"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) .

Baze de date & PHP


echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $indicatori = mysql_-ield_-la+s($re7*ltat, B)% echo "< r '( ;ndicatorii &oloanei 1 0 $indicatori"% mysql_close()% ?(

e. 7/t!nerea t!"ulu! MySQL al une! coloane


Pentru a obtine tipul MySQL al unei coloane dintr7un tabel MySQL, folositi functia mysql_@!eld_ty"e(# Aceasta preia doua ar%umente" valoarea returnata de functia mysql_query ! si indexul coloanei care va fi descrisa. &ndexul asociat cu prima coloana este 5, indexul asociat celei de7a doua coloane este l etc. &ata un exemplu care determina tipul primei coloane dintr7un tabel MySQL"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $tip = mysql_-ield_type($re7*ltat, B)% echo "< r '( 4ip &oloana 1 0 $tip"% mysql_close()% ?(

@. *eterm!narea ta/elulu! MySQL asoc!at une! coloane


Pentru a determina tabelul MySQL daca exista! asociat unei anumite coloane, folositi functia mysql_@!eld_ta/le(# Aceasta preia doua ar%umente" valoarea returnata de functia mysql_query ! si indexul coloanei care va fi descrisa. &ndexul asociat cu prima coloana este 5, indexul asociat celei de7a doua coloane este l etc. 4n cazul )n care coloana contine o valoare calculata sau daca respectiva coloana nu este asociata )n alt mod cu un tabel MySQL, functia returneaza un sir vid. &ata un exemplu care determina tabelul asociat primei coloane din setul de rezutate"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1

Baze de date & PHP


$ta el = mysql_-ield_ta le($re7*ltat, B)% echo "< r '( <*me ta el 0 $ta el"% mysql_close()% ?(

g. 7/t!nerea structur!! com"lete a setulu! de rezultate


1aca doriti obtinerea mai multor caracteristici ale setului de rezultate, o functie utila poate fi" mysql_@etc$_@!eld(# Aceasta functie returneaza un obiect ale carui proprietati contin o varietate de informatii cu privire la coloana unui tabel MySQL. Proprietatile sunt urmatoarele" /lo/ 7 are valoarea - )n cazul )n care coloana este de tip <LD< ma'_lengt$ 7 lun%imea maxima a coloanei* mult!"le_-ey 7 are valoarea - )n cazul )n care coloana este o c+eie non7unica name 7 numele coloanei not_null 7 are valoarea - )n cazul )n care coloana nu poate contine valoarea =#LL numer!c 7 are valoarea - )n cazul )n care coloana este numerica "r!mary_-ey 7 are valoarea - )n cazul )n care coloana este o c+eie primara ta/le 7 numele tabelului MySQL caruia )i apartine coloana ty"e 7 tipul MySQL al coloanei un!que_-ey 7 are valoarea - )n cazul )n care coloana este o c+eie unica uns!gned 7 are valoarea - )n cazul )n care coloana este de tip #=S&H=(1 zero@!ll 7 are valoarea - )n cazul )n care coloana este completata cu zerouri functia mysql_@etc$_@!eld(# preia doua ar%umente" valoarea returnata de functia mysql_query ! si indexul coloanei care va fi descrisa. &ndexul asociat primei coloane este 5, indexul asociat celei de7a doua coloane este l etc. &ata un exemplu care prezinta modul de obtinere si descriere a structurii complete a setului de rezultate pentru prima coloana dintr7un tabel MySQL"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $in-o = mysql_-etch_-ield($re7*ltat, B)% echo "< r '( &oloana 10 "% echo "<?23( lo 0 $in-oF( lo maH_len+th0 $in-oF(maH_len+th m*ltiple_Vey0 $in-oF(m*ltiple_Vey name0 $in-oF(name not_n*ll0 $in-oF(not_n*ll n*meric0 $in-oF(n*meric

Baze de date & PHP


primary_Vey0 $in-oF(primary_Vey ta le0 $in-oF(ta le type0 $in-oF(type *niq*e_Vey0 $in-oF(*niq*e_Vey *nsi+ned0 $in-oF(*nsi+ned 7ero-ill0 $in-oF(7ero-ill <'?23("% mysql_close()% ?(

Pentru a obtine aceste proprietati pentru toate coloanele din tabel, folositi o instructiune $for$, dupa exemplul de mai 2os, care parcur%e fiecare coloana, folosind ca limita a numarului de coloane valoarea returnata de functia mysql_num_fields !
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 $nr_camp*ri = mysql_n*m_-ields($re7*ltat)% -or ($i=B% $i<$nr_camp*ri% $iWW) . echo "< r '( &oloana $i0 "% $in-o = mysql_-etch_-ield($re7*ltat)% i- ($in-o) . echo "<?23( lo 0 $in-oF( lo maH_len+th0 $in-oF(maH_len+th m*ltiple_Vey0 $in-oF(m*ltiple_Vey name0 $in-oF(name not_n*ll0 $in-oF(not_n*ll n*meric0 $in-oF(n*meric primary_Vey0 $in-oF(primary_Vey ta le0 $in-oF(ta le type0 $in-oF(type *niq*e_Vey0 $in-oF(*niq*e_Vey *nsi+ned0 $in-oF(*nsi+ned 7ero-ill0 $in-oF(7ero-ill <'?23("% 1 else . echo "<ec*nosc*t"% 1 1 mysql_close()% ?(

$. 5ccesul nonDsecvent!al la coloanele unu! set de rezultate

Baze de date & PHP 'unctiile mysql_@etc$_roB(# si mysql_@etc$_array(# returneaza, )n %eneral, r;ndurile dintr7un set de rezultate )n mod secvential, incepand de la primul rand al tabelului. 9otusi, functia mysql_data_see-(# permite obtinerea accesului la r;ndurile unui set de rezultate )ntr7o maniera non7secventiala, . 'unctia are forma" mysql_data_see-(rezultat numar_rand# #nde $rezultat$ este valoarea returnata de functia mysql_query(), iar $numar_rand$ este indexul r;ndului la care doriti sa obtineti accesul. Primul r;nd al tabelului este numerotat cu 5, al doilea cu - etc. 'unctia returneaza 9:#( daca executia reuseste, respectiv 'ALS( )n caz contrar. Apoi, o invocare ulterioara a functiei mysql_@etc$_roB(# sau a functiei mysql_@etc$_array(# va returna r;ndul din pozitia specificata in functia mysql_data_see-(#. Studiati urmatorul exemplu, care obtine accesul la al treilea r;nd al setului de rezultate returnat de o intero%are anterioara"
<?php $sql = ""3$3&4 Q I2>! :n*me_ta el:"% $re7*ltat = mysql_q*ery($sql)% i- (mysql_errno()) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 i- (9mysql_data_seeV($re7*ltat, 2)) . echo "< r '("/ mysql_errno()/ " 0 "/ mysql_error()/ "< r '("% 1 else . $rand = mysql_-etch_array($re7*ltat, !@"#$_)"">&)% -oreach ($rand as $coloana) . echo "T $coloana T"% 1 1 mysql_close()% ?(

S-ar putea să vă placă și