Sisteme Sgbd Paralele
Baze de date distribuite
Datele aflate atât în propriul calculator cât și cele memorate în calculatoare la distanță pot fi accesate de utilizatori prin intermediul sistemelor pentru gestiunea bazelor de date distibuite.
1.1 Conceptul de bază
Vom defini mai întâi ce este o bază de date distribuită,lucru folositor în analiza sistemelor de gestiune a bazelor de date distribuite.
Baza de date distribuită este definită ca fiind o colectie de date intercorelată logic, datele fiind partajate, distribuite din punct de vedere fizic într-o rețea de calculatoare.
Sistemul de programe care permite gestiunea unei baze de date distribuite și care face ca distribuția să fie transparentă pentru utilizatorise numește sistem SGBDD distribuit
Un SGBDD este format din următoarele elementente:
-o singură bază de date logică,împărțită într-un număr de fragmente. pe unul sau mai multe calculatoare, sub controlul unui sistem SGBD separat cu calculatoarele legate printr-o rețea de comunicație este stocat fiecare fragment.Cererile utilizatorilor sunt prelucrate independent pe fiecare calculator,acesta necesită accesul la datele locale și,este capabil de asemenea să prelucreze date stocate pe alte calculatoare din rețea.
Baza de date este accesată de către utilizatori prin intermediul aplicațiilor.
Aplicațiile se clasifică în:
-aplicații locale ce nu necesită date din alte calculatoare;
-aplicații globale ce necesită date din alte calculatoare. Un SGBD trebuie să conțină cel putin o aplicație globală.
Sistemul SGBD are caracteristicile următoare:
-conține o colecție de date partajate logic;
-datele sunt împărțite într-un număr de fragmente;
-pot fi replicate fragmentele;
-sunt alocate pe calculatoare fragmentele/replicile;
-calculatoarele sunt legate printr-o rețea de comunicație;
-sub controlul unui SGBD se află datele din fiecare calculator ;
-Aplicațiile locale pot fi tratate autonom de SGBD-UL din fiecare calculator;
-fiecare SGBD participă la cel puțin o aplicație globală.
Fiind denumit uneori și principiul fundamental al sistemelor SGBD distribuite, precum rezultă și din definiția unui SGBD,se așteaptă ca un SGBD să facă distribuirea transparentă față de utilizator.
Proprietatea prin care sistemul distribuit pare ca un sistem centralizat reprezintă obiectivul transparenței.
1.2 Prelucrarea distribuită
O bază de date centralizată ce poate fi accesată printr-o rețea de calculatoare este definită ca fiind o prelucrare distribuită.
O bază de date distribuită este formată din date care sunt distribuite fizic in rețea și reprezintă esența definiției unei baze de date.Dacă datele sunt centralizate, chiar dacă alți utilizatori pot să le acceseze prin rețea , este considerată a fi o simplă prelucrare distribuită(figura)și nu un SGBD distribuit
1.3 Sisteme SGBD paralele
Sistemele de gestiune a bazelor de date paralele sunt formate din trei tipuri importante de resurse: memoria, procesorul si discul.
Un sistem SGBD rulat pe mai multe procesoare și discuri care au fost proiectate să execute operațiile în paralel ori de câte ori este posibil, pentru a îmbunătății performanțele se numește sistem SGBD paralel.
Sistemele cu un singur procesor nu mai pot îndeplini cerințele privind scalabilitatea eficientă ca și cost,fiabilitate si performanță,și ca o alternativă solidă și atractiva la un SGBD condus de un singur procesor o constituie SGBD condus de mai multe procesoare,acest lucru reprezinta baza sistemelor SGBD paralele.Pentru a pune la dispoziție mai multe procesoare cu acces comun la o singură bază de date,sistemul SGBD paralel trebuie să facă posibilă administrarea partajată a resurselor punând la dispoziție mai multe procesoare cu acces comun la o singură bază de date .
Performanțele și scalabilitatea sistemului sunt afectate de către resursele și modul în care acestea sunt partajate, ceea ce determină caracterul adecvat pentru o anumită aplicație.Bazându-ne pe aceste tipuri de conexiuni, arhitectura bazelor de date paralele poate fi clasificată în trei categorii:
-memorie partajată;
-disc partajat;
-nimic partajat.
Atâta timp cât în definiția SGBD distribuite sunt incluse uneori sistemele SGBD paralele cu nimic partajat, unde distribuirea datelor într-un sistem SGBD paralel se bazează exclusiv pe considerațiile privind performanțele.
În această arhitectura memoria partajată, discul și memoria sunt partajate între toate procesoarele, acestea comunică printr-o rețea inter-conectat.Această tratare este mult utilizată pe diverse platforme, de la stații de lucru personale care acceptă câteva miicroprocesoare în paralel, până la mașinile mari RISC (Reduced Instructions Set Computing -Prelucrarea datelor pe baza unui set redus de instrucțiuni), fiind cunoscută sub denumirea de prelucrare simetrică multiplă. Rețeaua de inter-conectare se ștrangulează(fig 1)când această arhitectură oferă acces foarte rapid la date pentru un număr limitat de procesoare.
Fiecare procesor are memorie și disc propriu în cadrul arhitecturii cu nimic partajat. Suprasolicitare poate fi produsă de transferul mesajelor în comunicarea inter-proces din punct de vedere al distribuției si al execuției concurente,arhitectura fiind cea mai bună,fiind cunoscută și sub denumirea de prelucrare paralelă masivă,fiind o arhitectură cu procesoare multiple,în care fiecare face parte dintr-un sistem complet,cu propria sa memorie și capacitate de stocare pe disc.Împărțită între toate discurile sistemelor asociate acesteia,o bază de date,unde datele sale sunt disponibile transparent pentru utilizatorii din toate sistemele.(fig2)
Cea mai simplă arhitectură este discul partajat, în care orice procesor poate accesa orice disc conectat la sistem ce are propria sa memorie optimizată pentru aplicații care sunt inerent centralizate și necesită un grad înalt de disponibilitate și performanță. (fig3)
1.4 Avantajele si dezavantajele sistemelor SGBDD
1.4.1 Avantaje
-Se reflectă structura organizațională
În mod natural, multe organizații sunt distribuite în mai multe locuri.Exemplu: BCR are mai multe filiale În diferite orașe. Bazele de date utilizate într-o astfel de aplicație sunt distribuite în partajat și mod natural între aceste locuri.
Autonomie locală și caracter partajat
Datele stocate în alte calculatoare, pot fi accesate de utilizatori de la un calculator, fiind astfel reflectată în cadrul distribuției bazei de date,distribuția geografică a unei organizații.Datele pot fi plasate În servere-le cele mai apropiate de utilizatorii care le folosesc în mod normal se plasează datele,astfel utilizatorii dețin controlul local asupra datelor și pot stabili și impune politici locale referitoare la utilizarea acestora.
-Disponibilitate crescută
O pană a calculatorului într-un SGBD centralizat are ca efect întreruperea operațiilor acestuia.
Pe când o pană din cadrul unui server sau o pană a unei linii de comunicație, în cazul SGBDD care face ca unele servere SGBDD distribuite să nu fie accesibile, nu face ca întregul sistem să devină inoperabil.În ciuda unor astfel de pene, sistemele SGBDD distribuite sunt proiectate astfel încât să continue să funcționeze
-Fiabilitate crescută
Pana unui nod sau a unei linii de comunicație nu face neapărat ca datele să fie inaccesibile, întrucât datele pot fi reproduse astfel încât să existe în cadrul mai multor servere.
-Performanțe îmbunătățite
Este posibil ca viteza de acces la baza de date să fie îmbunătățită comparativ cu o bază de date situată la distanță deoarece datele sunt localizate în apropierea server-ulul și dat fiind paralelismul inerent al sistemelor SGBD distribuite.
-Economie.
Obținerea unor calculatoare separate de către secții și departamente să fie mult mai eficientă în ceea ce privește costul descriind puterea de calcul proporțional cu pătratul costului echipamentului -cu un cost de trei ori mai mare se obține o putere de calcul de nouă ori mai mare aceasta fiind cunoscută și ca legea lui Grosh (1960).
Acolo unde bazele de date sunt îndepărtate din punct de vedere geografic și aplicațiile necesită accesul la date distribuite reprezintă a doua economisire potențială de costuri.
-Dezvoltarea modulară.
Dezvoltarea într-un sistem SGBD centralizat, poate atrage după sine modificări atât în hardware cât și în software.
1.4.2 Dezavantaje
-Complexitatea
Fiabilitatea si disponibilitatea sunt inerent mai complexe într-un sistem SGBD distribuit,decât iîntr-un sistem SGBD centralizat deoarece natura sa distribuită este ascunsă de utilizator și produce un nivel acceptabil al performanțelor.Sistemul SGBD are un nivel suplimentar de complexitate dat de faptul că datele pot fi reproduse.
-Costul. Prețurile procurării și întreținerii unui sistem SGBDD trebuie să fie mai mari decât pentru un sistem SGBD centralizat pentru a demonstra o complexitate crescută. Datorită utilizări rețelei există costuri continue de comunicații.
-Securitatea Într-un sistem SGBD distribuit nu trebuie controlat numai accesul la datele reproduse în locații multiple ci trebuie securizată și rețeaua însăși dape când într-un sistem centralizat,accesul la date poate fi controlat cu ușurință.
-Controlul integrității este mai dificil. Valabilitatea și coerența datelor stocate se referă la integritatea bazelor de date.
Regulile de coerență, pe care baza de date nu trebuie să le încalce sunt de obicei constrângeri ce caracterizează integritatea. Costul comunicațiilor și prelucrării necesare pentru impunerea constrângerilor de integritate poate fi prohibitiv într-un sistem SGBD distribuit.
-Lipsa de standarde
Abia acum remarcăm apariția protocoalelor de comunicații și de acces la date standard cu toate că sistemele SGBD distribuite depind de eficiența comunicaților. Potențialul sistemelor SGBD distribuite a fost limitat de lipsa de standarde
-Lipsa de experiență
Multe dintre protocoale și probleme sunt bine înțelese, însă aceste sisteme nu au fost pe deplin acceptate, în prezent aflându-se în uz câteva sisteme SGBD distribuite prototip și specializate.Prin urmare nu există același nivel de experiență ca cel corespunzător sistemelor SGBD centralizate.
-Proiectarea mai complexă a bazei de date
Fragmentarea datelor, alocarea fragmentelor pe anumite servere și replicarea datelor sunt proprietăți de care este necesar să se țină cont în proiectarea unei baze de date distribuite.
1.5 Funcțiile și arhitectura unui sistem SGBDD
1.5.1 Funcțiile unui sistem SGBDD
Funcțiile unui sistem SGBDD sunt următoarele:
– pentru a furniza accesul la servere și a permite interogărilor transferul de date între servere ce utilizează o rețea se folosesc servicii de comunicații extinse;
– detaliile de distribuire a datelor se stochează într-un catalog extins al sistemului;
– optimizarea interogărilor și a accesului la date sunt cuprinse într-o prelucrare extinsă a interogărilor;
– pentru a menține consistența datelor replicate se folosește un control extins al concurenței;
– penele serverelor individuale și penele legăturilor de comunicație sunt elemente de care țin cont serviciile extinse de recuperare.
1.5.2 Arhitectura de referință pentru un sistem SGBDD
O arhitectură de referință pentru un sistem SGBD centralizat este reprezentată de arhitectura ANSI-SPARC cu trei niveluri. Este mult mai dificil să se găsească o arhitectură echivalentă care sa fie aplicabilă (fig4) datorită diversități sistemelor SGBD distribuite.
Arhitectura de referință prezentată în figura 4este formata din următoarele scheme:-o mulțime de scheme globale externe;
-o schemă conceptuală globală;
-o schemă de fragmentare și una de alocare;
-o mulțime de scheme pentru fiecare SGBD local cu arhitectura ANSI-SPARC pe trei niveluri.
Corespondențele dintre diverse scheme reprezintă muchii. Unele niveluri pot lipsi din cadrul arhitecturii în funcție de nivelurile de transparență acceptate.
O descriere logică a întregii baze de date, ca și cum nu ar fi distributivă reprezintă schema conceptual globală.
Schemele de fragmentare și alocare
Descrierea a modului în care vor fi fragmentate logic datele reprezintă schema de fragmentare. Descriere a locului unde vor fi localizate datele reprezintă schema de alocare.
Scheme locale
Nivelurile echivalente din arhitectura ANSI-SPARC cu trei niveluri corespund schemelor locale conceptuale și locale interne.
1.5.3 Arhitectura componentelor unui SGBDD
Pentru un sistem SGBDD se poate identifica o arhitectură a componentelor formată din patru părții principale, indiferent de arhitectura de referință:
-componenta locală a sistemelor SGBD (SGBDL);
-componenta comunicației de date (CD);
-catalogul global al sistemului (CGS);
-componenta sistemelor SGBD distribuite (SGBDD).
SGBD -urile locale ale sistemelor distribuite (SGBDL)
Un sistem standard responsabil cu controlul datelor locale din fiecare server care are o bază de date constituie un SGBD local.Acesta are propriul său catalog al sistemului în care sunt stocate informații despre datele păstrate în server -ul respectiv
Programele care formează Componenta de comunicație pentru date (CD) permit ca toate serverele să comunice unele cu altele. Informațiile despre servere și legături sunt informații pe care le conține componenta CD.
Catalogul global al sistemului (CGS)
Informațiile specifice naturii distribuite a sistemului, cum ar fi schemele de fragmentare și de alocare sunt păstrate în catalogul CGS. Poate fi fragmentat si distribuit, complet reprodus sau centralizat, ca oricare alta relație (fig) și astfel poate fi el însuși administrat ca o bază de date distribuită
2 PHP
2.1 Un limbaj scriptual de largă utilitate dezvoltat inițial pentru producerea paginilor web cu conținut dinamic este PHP-ul.PHP poate fi implementat, în mod gratuit, pe aproape orice sistem de platformă și sistem de operare în majoritatea serverelor web ca un interpretor de sine stătător.PHP a fost inițial dezvoltat în anul 1995, de Rasmus Lerdorf. Produse de către PHP Group actualele implementării servesc ca repere de standardizare neexistând practic o specificație formală.Termenul PHP la început avea înțelesul de "Personal Home Page", în prezent acesta schimbându-se în acronimul recursiv"Hyper Text Processor".
2.2 Sintaxe de bază și comenzi
Scriptul PHP poate fi foarte simplu sau foarte complex. Avem nevoie de un editor de texte obișnuit (Notepad sub Windows, vi, emacs say pico sub Unix) sau unul specializat care cunoaște sintaxa PHP pentru editarea unui asemenea script. Două linii speciale, care indică server-ului PHP că textul cuprins între cele două linii este alcătuit din instrucțiuni PHP ce sunt cuprinse în fiecare program PHP. Specificarea codului se face astfel:
<?php
instrucțiuni
?>
Aceasta este o metoda prefererată și indicată de către specificațiile limbajului.
O altă metodă pe care putem folosi pentru a indica o expresie simplă este următoarea:
<?
instrucțiuni
?>
Următoarea variantă este funcțională doar în cazul în care sunt activate tag-urile în stil ASP pentru serverele Microsoft:
<%php
instrucțiuni
%>
O variantă clasică funcțională pentru serverele care nu înteleg XML, pe care o folosește și JavaScript este următoarea:
<SCRIPT LANGUAGE="PHP">
instrucțiuni
</SCRIPT >
Pentru a insera cod PHP într-un site web există două metode principale.Prima metodă este de a insera cod PHP, prin inserarea unor tag-uri speciale în interiorul unei pagini HTML,iar cea de a doua este de a scrie direct un fișier care să conțină scriptul PHP cu extensia .php.
2.3 Tipuri de date
Mai multe tipuri principale de date se folosesc în cadrul programelor PHP și anume:
-tipuri scalare (boolean,integer,double,string)
-tipuri compuse (array,obiect)
-tipuri speciale(resource,NULL)
Tipul de date simplu care conține o valoare de adevăr,aceasta putând fi adevărată (TRUE)sau falsă (FALSE) reprezintă tipul boolean. Categoriile de numere:întregi (integer) și reale(double) sunt folosite de tipul integer și respectiv tipul double. Numerele fără parte fracționară reprezintă numerele întregii,iar cele reale care includ fracții zecimale reprezintă valori numerice.Tipul string(șir de caractere)poate conține orice caracter,șirurile fiind utile pentru stocarea datelor ce nu pot fi calculate,cum sunt: nume,adrese,comentarii,etc.
2.4 Variabile, constante, expresii și operatori
2.4.1 Variabile
Se numește variabilă o valoare cu nume, deoarece este posibilă modificarea valorii asociate numelui.Există câteva reguli asupra numelor variabilelor impuse de PHP, astfel încât acestea să poată face imediat diferența dintre variabile și numere, șiruri și alte elemente de limbaj.Metoda de formare a unui nume corect de variabilă PHP este reprezentată în exemplul de mai jos:
– simbolul $ se pune înaintea unei variabile;
-după simbolul dolarului, este necesară o literă sau o liniuță de subliniere (_), litera poate fi majusculă sau minusculă.
-după aceasta poate fi scris orice caracter de tip literă, cifră sau liniuță de subliniere.
Exemple de variabile:
$lungime
$*1
$punctajul _maxim.
Folosite pentru a afla starea serverului web, numite și variabile de mediu PHP furnizează o serie de variabile predefinite.
2.4.2 Constante
Un nume dat unei valori simple se numește constantă. O constantă cum sugerează și numele său nu își poate modifica valoarea de-a lungul execuției scriptului. Constantele, prin convenție sunt scrise cu litere mari. Folosind funcția define () definim o constantă.
Exemplu:
define("CONSTANT","Hello World.");
echo CONSTANT;
2.4.3 Expresii
Cele mai importante,"pietre de temelie"ale limbajului PHP sunt expresiile. Aproape tot ce scriem reprezintă o expresie în limbajul PHP. Constantele și variabilele sunt cele mai uzuale expresii.
Exemplu:
$condiție ? $operand1 : $operand2;
$b=$a=5;
$i++;
2.4.4 Operatori
În PHP sunt incluși operatori familiari folosiți în algebră pentru executarea operațiilor aritmetice precum:adunare(+),scădere(-),înmulțire (*),împărțire (/).
Exemplu:
$profit = $vânzări – cheltuieli;
$arie = $înălțime * $latime;
Operanzi sunt variabilele sau valorile literale asociate cu un operator.PHP , în afara operatorilor prezentați mai sus mai include și numeroși operatori mai puțin cunoscuți:modulo(%),incrementare(++),decrementare(–),concatenare(.),atribuire(==),operatori pe biți (&,A,|,~,<<,>>),operatori de comparație (==,===,!=,<>,!==,<,>,<=,>=,)operatorul de control al erorilor (@) si operatori logici(and,or,xor,!,&&,||).
Comentariile în PHP sunt de două feluri:pe un singur rând sau pe mai multe
//acesta reprezintă un comentariu pe un singur rând
/*acesta reprezintă un comentariu pe mai multe rânduri,el putând fi format dintr-un număr oricât de mare de linii.*/
2.5 Tablouri
Stocarea mai multor valori într-o variabilă ste convenabilă.O variabilă de acest gen se numește tablou iar elementele tabloului sunt valori individuale. Se numesc variabile scalare variabilele care au o singură valoare.
În exemplu următor se crează un tablou numit clasa care are două elemente cu valoarea matematică, respectiv chimie.
$clasa[1] = "geometrie";
$clasa[2] = "contabilitate";
Se specifică numele tabloului și valoarea cheii , pentru a obține acces la un element al tabloului.
Exemplu: $clasa_mate = clasa[1];
Cheile ce se folosesc la identificarea valorilor din tablou nu trebuie să fie neapărat numere.Ele pot să fie și de tip șir, tabloul purtând numele de tablou non-secvențial.
Exemplu:
$preferințe [Andrei]=”Înghețată”;
$preferințe[Mihai]=”vanilie”;
Pentru a parcurge un tablou non-secvențial se folosește instrucțiunea foreach,care combină instrucțiunea FOR cu funcția EACH și are următoarea formă:
Foreach($tablou as $cheie => $valoare)
{
//instrucțiuni
}
Tabloul denumit $tablou este parcurs în mod iterativ de instrucțiune, stabilind valori adecvate pentru valorile variabilelor $cheie și $valoare aferente fiecărui element al tabloului ,iată un exemplu:
$limbaje = array(10=>”Pearl”, 20=>”PHP”, 21=>”Python”);
Foreach ($ limbaje as $index => $limbaj)
{
Echo ”<BR>$index => $limbaj”;
}
2.6 Structuri de control
O serie de instrucțiuni construiesc orice script PHP. O atribuire,un apel de funcție,un ciclu,o expresie condițională sau o instrucțiune vidă pot fi instrucțiune.
Caracterul punct-virgulă(;)este caracterul cu care se încheie instrucțiunile. Instrucțiunile pot fi deasemenea grupate în grupuri de instrucțiuni aflat între acolade.
2.6.1 Instrucțiunea IF
Una din cele mai importante caracteristici a multor limbaje de programare o reprezintă instrucțiunea IF.Structura acesteiinstrucțiunii este identică cu cea din limbajul C.
if(expresie)
instructiune
Se execută instrucțiunea atunci când expresia are valoarea TRUE. Instrucțiunea IF are urmatoarea variantă completă:
if(expresie)
instrucțiune1
else
instrucțiune2
Instrucțiunile de mai su instrucțiune1 respectiv instrucțiune2 pot fi și grupuri de instrucțiuni aflate între acolade.
2.6.2 Instrucțiunea ELSE-IF
Această instrucțiune așa cum îi spune și numele este o combinație între else și if.Aceasta instruțiune se utilizează pentru a specifica mai multe variante:
if($a>$b)
{
print ”a este mai mare ca b”;
}
elseif ($a == $b)
{
print ”a este egal cu b”;
} else
{
print ”a este mai mic ca b”;
}
2.6.3 Instrucțiunea SWITCH
Pentru o decizie în două sensuri putem folosii instrucțiunea IF. Se pot folosi instrucțiuni IF îmbricate sau folosind instrucțiunea SWITCH, pentru a lua o decizie în mai multe sensuri.Instrucțiunea SWITCH este asemănătoare cu cea din limbajul C
Exemplu:
switch ($număr){
case(1): echo ”Nivel scăzut!”;
break;
case (2): echo ”Nivel mediu!”;
break;
case (3): echo ”Nivel ridicat!”;
break;
default: echo ”Aceasta nu este un cod viabil!”;
}
2.6.4 Instrucțiunea WHILE
Cele mai simple structuri repetitive în limbajul PHP sunt ciclurile while. Instrucțiunea WHILE are următoarea structură de bază:
while(expresie)instructiune
Atâta timp cât expresie are valoarea TRUE se execută ciclul.
Exemplu:
$i =1;
while ($i <= 10){
print $i++;
}
2.6.5 Instrucțiunea DO…WHILE
Instrucțiunile DO și WHILE sunt foarte asemănătoare cu structurile while,exceptănd faptul că evaluarea expresiei se află la sfârșitul ciclului.Diferența fundamentală constă în faptul că ciclul este executat cel puțin odată.Se iese din ciclu în momentul în care expresia este evaluată da fiind FALSE.
Structura de bază este la fel cu cea folosită în C:
do {
instrucțiune
}
while (expresie)
2.6.6 Instrucțiunea FOR
Structurile repetitive FOR sunt cele mai complexe cicluri în PHP.Structura de bază folosită este asemănătoare cu cea din limbajul C, având următoarea sintaxă :
for(expr1;expr2;expr3)instrucțiune
Este executată necondiționat la intrarea în ciclu prima expresie (expr1). Se evaluează expr2, la începutul fiecărei iterații.Ciclul continuă prin executarea instrucțiunii, dacă expresia este evaluată TRUE altfel dacă expr1 este evaluată ca fiind FALSE execuția ciclului se termină.
Expr3 este executată la sfârșitul fiecărei iterații.
Pot lipsi oricare dintre cele trei expresii. Ciclul ruleza la infinit dacă expr2 lipsește. Instrucțiunea break se folosește pentru a ieși forțat din ciclu.
2.7 Funcții
Mai mult de 700 funcții predefinite sunt folosite în PHP. Vom discuta pentru început despre apelarea acestor funcții,urmând ca în continuare să ne ocupăm de crearea și apelarea funcțiilor create de utilizator.
2.7.1 Apelarea funcțiilor predefinite
Utilizarea ,apelarea sau invocarea funcției este definită prin procesul de executare a unei funcții. Folosirea unei funcții se poate face prin scrierea numelui funcției ,urmat de o pereche de paranteze.
Argumentele,reprezentând valori de intrare care influențează operarea și rezultatul funcției sunt preluate de majoritatea funcțiilor.Argumentele sunt specificate între paranteze și sunt despărțite prin virgule. O literă,variabilă sau o expresie pot reprezenta argumentul unei funcții.Numele funcțiilor predefinite nu sunt case sensitive.
Unele funcții folosite pot avea argumente opționale care pot fi specificate sau omise,în conformitate cu dorințele programtorului.
2.7.2 Definirea unei funcții
Se pot defini și folosi propriile funcții,în afară de a utiliza funcțiile din biblioteca de funcții a limbajului PHP. Definirea unei funcții,se face în felul urmăator:
function nume_funcție(nume_argumet)
{
//aici se inserează corpul funcției
}
În modelul exemplificat de mai sus, nume_funcție este numele funcției,iar nume_argument este numele argumentului funcției.Numele funcțiilor în PHP nu reprezintă sensibilitate între majuscule și minuscule. Antetul funcției este reprezentat de cuvântul cheie function,numele funcției și argumentele funcției,iar instrucțiunile incluse între acolade formează corpul funcției.
Se poate întâmpla ca o funcție să nu aibă argumente,sau la fel de bine cum o funcție poate avea mai multe argumente.Argumentele funcției sunt separate între ele prin virgule.Dacă se vrea ca o funcție să întoarcă o anumită valoare,trebuie determinat ca funcția să execute o instrucțiune return.
Exemplu:
function calculează_arie($înalțime, $lățime)
{
return $înalțime * $lățime
}
2.7.3 Apelarea unei funcții definite de utilizator
În același mod în care este apelată o funcție încorporată poate fi apelată și o funcție definită de utilizator. Funcția de mai sus poate fi apelată astfel:
$arie =calculeză_arie(2,4);
2.7.4 Funcții recursive
Este posibil ca o funcție PHP să se autoapeleze,o astfel de funcție se numește funcție recursivă.Funcțiile recursive sunt utile pentru descrierea mai compactă și mai clară a funcțiilor.De subliniat este faptul că orice funcție recursivă poate fi realizată și nerecursiv.
2.7.5 Definirea argumentelor cu valori implicite
Definirea de funcții cu argumente prestabilite este permisă de PHP 4. Argumentul ia valoarea stabilită specificată dacă este invocată o funcție care are un argument prestabilit,și nu este furnizată nici o valoare pentru argumentul respectiv. O variantă pentru funcția de mai sus ar putea fi:
function calculează_arie ($înălțime = 1, $lățime = 1)
{
return $înălțime * $lățime;
}
2.8 Refolosirea codului
Un mecanism care permite obținerea accesului la programele scrise anterior este refolosirea codului.
Instrucțiunile require,require_only și include implementează în PHP acest mecanism.
2.8.1 Instrucțiunile require și require_only
Inserarea unui script PHP creat anterior în interiorul unui alt script PHP este permisă de instucțiunea require.
Un lucru de menționat este faptul că instrucțiunea require este prelucrată la încărcarea scriptului PHP asociat,înaintea legării valorilor la variabilele corespunzătoare.Forma generală a instrucțiunii este:
require (nume_fișier);
unde nume_fișier este numele fișierului PHP ce trebuie inclus în scriptul curent.
Instrucțiunea require poate scuti programatorii de un volum mare de muncă.Acest procedeu,de asemenea poate simplifica întreținerea programului,deoarece informațiile standard pot fi rezidente într-un singur fișier ,ceea ce le face ușor de localizat și de revizuit.
Fișierul specificat este inclus o singură dată într-un script dat asigurat prin instrucțiunea corelată require_only. Instrucțiunea require_only este foarte utilă în cazul în care se folosesc fișiere de includere care folosesc instrucțiunea require pentru a include conținutul altor fișiere de includere.
2.8.2 Instrucțiunea include
Foarte asemănătore cu instrucțiunea require,instrucțiunea include are o diferența ce constă în faptul că înlocuiește apelul din fișierul apelant cu instrucțiunile pe care le conține fișierul de includere,ca și cum ar fi apărut în textul scriptului apelant deci instrucțiunea include este o instrucține executabilă. Sintaxa este asemănătoare cu diferența că se pot folosi și variabile ca parametrii.
3 MySQL
3.1 Introducere în bazele de date
PHP,după cum am văzut în capitolul anterior,este un limbaj scriptual de tip server-side ce permite inserția în paginile web a instrucțiunilor ce vor fi executate de către software-ul server-ului web(ex.Apache,IIS,etc)
Un server de baze de date este software-ul care administrează baza de date, fiind constituit dintr-un sistem software capabil să stocheze cantități mari de informație într-o formă organizată ce poate fi accesibilă cu ușurință,cu ajutorul limbajelor scriptuale gen PHP,ASP,etc Un client de baze de date este o aplicație care cere servicii de la server, de exemplu transmite date la baza de date, sau cere date de la baza de date.
???? Un exemplu ar fi utilizarea unei baze de date în care ar fi stocate o listă a cărților din biblioteca dumneavoastră.Cu ajutorul PHP datele vor putea fi accesate din această bază de date și afișate în pagina web.În această situație avem un dublu avantaj față de utilizarea doar a HTML-ului.Un alt mare avantaj este adăugarea noilor cărți achiziționate care este mult mai ușor de realizat,adăugându-se înregistrările corespunzătoare în baza de date.Codul PHP va putea afișa noile înregistrări alături de cele existente la o listare ulterioară .
O bază de date, uneori numită și bancă de date (abreviat BD), reprezintă o modalitate de stocare a unor informații și date pe un suport extern (un dispozitiv de stocare), cu posibilitatea extinderii ușoare și a regăsirii rapide a acestora. Baza de date este formată din unul sau mai multe tabele,fiecare din acestea conținând câte o listă de date.În cazul exemplului mai sus menționat vom avea un tabel care va stoca titlurile cărților.Fiecare tabel va avea mai multe coloane sau câmpuri.Fiecare coloană stochează anumite părți de informație.În exemplu avem coloana titlurilor, știrilor dintr-o revistă online,coloana autorilor,coloana datei publicației.
Exemplu…..figură(desenat)
3.2 Baze de date relaționale
Cel mai cunoscut și utilizat model în teoria bazelor de date este modelul relațional acesta specifică că o bază de date ce utilizează acest model are în alcătuire mai multe tabele .
Termenul de bază de date relaționale a fost definit în anul 1970de către Edgar Codd de la IBM Almaden Research Center.
Un tabel este reprezentat printr-un set de rânduri (tupluri) ce au același atribut(coloană). Un rând de regulă reprezintă informații despre un obiect ,obiect care poate fi fizic sau sub formă de concept.
Un tabel organizat în rânduri și coloane reprezintă descrierea unei relații.
?????? Toate datele la care se face referință printr-un atribut(coloană) se află în același domeniu și sunt conforme acelorași constrângeri. Rândurile dintr-un tabel nu au o ordine specifică iar acestea nu impun o ordine coloanelor ,aceste caracteristici sunt precizate de modelul relațional. datele sunt accesate de aplicații prin specificarea unor ”queries”ce folosesc operații ca select pentru identificarea rândurilor,project pentru identificarea coloanelor și join pentru unirea tabelelor. Utilizând operatorii insert,delete și update se pot face modificări asupra tabelelor,noile rânduri putând avea valori explicite sau derivate dintr-un ”query”.
Se pot identifica rândurile ce pot fi actualizate(update) sau șterse (delete) prin intermediul unui query. Fiecare rând al unui tabel trebuie să fie unic identificat printr-o combinație de una sau mai multe valori dintr-o coloană, aceasta caracteristică purtând numele de cheie primară sau ”primary key”.
Restricționarea domeniului unor coloane se face cu ajutorul constrângerilor (constraints), acestea putând da posibilitatea implementări unor reguli specifice mediului de afaceri într-o bază de date. Datele ce pot fi stocate în tabele sunt restricționate de constrângeri. Definirea constrângerilor se face folosind expresii ce au ca rezultat valori booleene,indicând dacă datele satisfac sau nu satisfac constrângerea. Poate fi aplicată o singură constrângere unei singure coloane sau unui rând sau unui întreg tabel.
În mod unic o relație dintr-o bază de date este definită de o cheie primară (primary key). Pentru a fi o cheie primară bună,o coloană nu trebuie să se repete. Două sau mai multe coloane (atribute) dintr-un tabel care împreună identifică o înregistrare (record ) se numește cheie compusă (compozite key).
Referința unei chei dintr-un alt tabel, ce exprimă că tabelul referință are în una din coloanele sale valori ale unei chei din tabelul referențiat poartă numele de cheie străină (foregn key). Aceste chei străine nu necesită condiția de a avea volori unice în tabelul referință,ele folosind valorile coloanelor din tabelul referențiat pentru a restricționa domeniul uneia sau mai multor coloane din tabelul referință.
Codurile executabile care sunt asociate și în general stocate în baza de date se numesc proceduri stocate. De regula aceste proceduri colectează si personalizează operații comune,ca spre exemplu un rând dintr-un tabel ce primește informații statistice despre diverse tipare de utilizare sau încapsulează calcule complexe pentru mediul de afaceri,ele fiind folosite de regulă ca un API. Extensiile procedurale în cadrul sintaxei declarative standard SQL au posibilitatea dată de implementările procedurilor stocate pe sistemele de baze de date SQL de de a fi utilizate de dezvoltatori. Deși nu sunt parte a modelului relațional toate implementările comerciale includ proceduri stocate.O dată poate fi accesată mai rapid cu ajutorul unui indice.Orice combinație a coloanelor dintr-un tabel pot creea indici. Rândurile potrivite sunt găsite în mod aleator utilizând indexul prin intermediul coloanelor filtrate de cereri, nemai fiind nevoie să se verifice fiecare rând în parte.Aceste baze de date relaționale ,pun la dispoziție mai multe tehnici de indexare în mod normal.Indicii sunt considerați ca o implementare de detaliu nefiind considerați în mod normal parte a bazei da date deși sunt menținuți de același grup care sunt răspunzători și de celelalte părți ale bazei de date.
Codd a propus normalizarea bazei de date ca o parte integrantă a modelului relațional.Normalizarea elimina fenomenul de duplicare al datelor ce poate duce la prevenirea manipulării corecte a acesteia sau apariția anumitor anomalii sau chiar pierderea datelor și cuprinde un set de practici bune de urmat în procesul de design al unei baze de date.
Aceste baze de date relaționale au devenit o alegere predominantă în stocarea informațiior în baze de date utilizate în mediile financiare,de producție,date de personal, etc. Bazele de date ierarhice și bazele de date tip rețea au fost înlocuite de bazele de date relaționale deoarece acestea sunt mult mai ușor de înțeles și utilizat chiar dacă sunt mai puțin înțelese
Dezvoltatorii cei mai importanți ai soluțiilor comerciale pentru bazele de date sunt Oracle,Microsoft și IBM. Implementările cele mai cunoscute de tipul open-source ale sistemelor de baze de date sunt:MySQL, PostgreSQL și SQLite.
3.3 Ce este SQL
SQL (Structured Query Language – Limbaj Structurat de Interogare) este un limbaj de programare specific pentru manipularea datelor în sistemele de manipulare a bazelor de date relaționale (RDBMS), iar la origine este un limbaj bazat pe algebra relațională. Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și controlul accesului la date. Acest limbaj este utilizat în comunicarea cu bazele de date. SQL după cum este stipulat de către ANSI este limbajul standard pentru gestionarea sistemelor de baze de date relaționale. SQL folosește comenzile pentru a crea unelesarcini ca actualizarea unei baze de date (update), extragerea sau ștergerea datelor dintr-o bază de date.
Amintim mai jos cele mai cunoscute sisteme de gestionare a bazelor de date relaționale ce folosesc SQL:Oracle, Sybase, Microsoft SQL Server, Acces, Ingres, etc. Pentru a se efectua orice tip de operație asupra bazei de date se pot folosi comenzile standard precum: ”Select”, ”Insert”, ”Update”, ”Delete”, ”Create” și ”Drop”.
3.4 Instalarea MySQL
MySQL poate fi protat pe orice platformă ce poate utiliza un compilator C++ și o implementare funcțională a firelor de execuție POSIX (cerință necesară suportului pentru server). MySQL poate fi compilat cu succes pe următoarele sisteme de operare cu suportul POSIX:
-FreeBSD 5.x și ulterioare cu thread-uri native
-HP-UX 11.x cu thread-uri native
-Linux.Buil-uri bazate pe distribuții recente ale kernel-ului 2.6
-Mac OS X
-Linux 2.8 pe SPARC și x86, incluzând suport pentru thread-uri native
-Windows XP, Windows Vista, Windows Server 2003, și Windows Server 2008
Rularea MySQL nu este posibilă pe toate platformele recomandate în mod egal. Pentru a determina dacă un sistem este capabil să găzduiască un server MySQL se vor avea în considerație următorii factori:
-Stabilirea generală a librăriei pentru thread-uri. Stabilitatea MySQL depinde de librăria de thread-uri cu care lucrează deși platforma în sine se poate lăuda de o reputație excelentă;
-Capacitatea kernel-ului și a librăriei de thread-uri pentru a beneficia de suport pentru sistemele multi-procesor (SMP). Altfel spus, când un proces crează un fir de execuție (thread) ar trebui să fie posibil ca acesta să ruleze pe un procesor diferit de procesul original;
-Capacitatea kernel-ului și a librăriilor pentru thread-uri de a rula multe thread-uri;
-Stabilitatea și performanța generală a sistemului de fișiere;
-Lungimea tabelelor. Performanța este afectată de abilitatea sistemului de a lucra cu fișiere mari, dacă tebelele sunt mari;
-Numărul de utilizatori care au rulat MySQL cu succes pe o platformă în configurații similare.
3.4.1 Instalarea MySQL pe platforma Linux
Secțiunea următoare definește procedura instalării MySQL pe platforma Linux. MySQL poate fi descărcat gratuit de la adresa http://www.mysql.com/. Descărcați ultima versiune stabilă disponibilă.După terminarea descărcării pachetului de la adresa mai sus menționată se va avea în vedere înaintea demarării procesului de instalare dacă nu dorim ca MySQL să fie instalat doar în directorul home,trebuie să fiți autentificați ca root (privilegii administrative).Pentru a începe procesul,mutați-vă în user/local (puteți folosi și altă locație dacă doriți ca instalarea să fie efectuată într-o altă cale) și despachetați fișierul descărcat pentru crearea directorului MySQL (schimbați version cu numărul versiunii MySQL descărcată de dumneavoatră).
shell#cd /user/local
shell#tar xfz mysql-version.tar.gz
La pasul următor,creați un symbol-link către directorul mysql-version cu numele mysql pentru a ușura accesarea acestui director:
shell#ln –s mysql-version mysql
shell#cd mysql
În acest moment MySQL este instalat,dar înainte de a putea începe să lucrezi efectiv în program,bazele de date ale acestuia vor trebui să fie instalate.Directorul curent fiind tot mysql este necesar să tastăm următoarea comandă:
shell#scripts/mysql_install_db
Tot ceea ce mai este necesar să realizăm, după instalarea MySQL este să integrăm partea scriptuală server-side,în cazul nostru PHP să lucreze împreună pe serverul web.O idee bună este să setăm un utilizator cu privilegii speciale pentru MySQL, aceasta împiedică posibilitatea ca cineva să utilizeze MySQL server ,nepemițându-i-se să pătrundă în sistem. Pentru a creea un cont nou de utilizator este necesar să fii autentificat ca root prin introducerea următoarelor comenzi:
shell#grupadd mysql
shell#useradd –g mysql mysql
MySQL stochează informațiile bazei de date în subdirectorul data al directorului unde acesta a fost instalat.Presupunând că instalarea a fost realizată cu succes în locația user/local/mysql,se folosesc următoarele comenzi:
shell#cd /user/local/mysql
shell#chown –R mysql data
shell#chgrp –R mysql
shell#chmod –R go-rwx data
Acum se poate lansa serverul MySQL pentru prima dată
Introduceți comanda următoare din directorul MySQL:
shell#bin/ safe_mysql – -user=mysql &
Dacă pe ecran apare mesajul ”mysql daemon ended”,atunci înseamnă serverul MySQL nu a putut porni.
Mesajul de eroare de regulă poate fi generat din cauza faptului că o altă instanță MySQL rulează pe mașina în cauză. Acest mesaj de eroare trebuie să fi fost scris într-un fișier numit hostname.err (reprezintă numele mașinii dumneavoastră) aflat în subdirectorul data din directorul MySQL.
Dacă serverul MySQL este lansat cu succes,el rulează până la oprirea sistemului.Pentru testarea rulării corespunzătoare serverului MySQL se folosește comanda:
shell#bin/mysqladmin –u root status
În subdirectorul supportfiles din directorul MySQL, veți găsi un script numit mysql.server care poate fi adăugat rutinelor de start-up al sistemului,acest lucru se folosește dacă se dorește ca serverul MySQL să ruleze automat când sistemul dumneavoastră este pornit.Când este creat un utilizator dedicat serverului MySQL,este necesar a se informa MySQL să pornească cu acest utilizator în mod implicit.Pentru a se executa acestă cerință ,trebuie creat în directorul /etc sub denumirea de my.cnf ce va conține următoarele linii:
[mysqld]
user=mysqld
În acest moment,pentru pornirea serverului MySQL, când veți rula safe_mysqld sau mysqld.server acesta va fi lansat de utilizatorul musql,în mod automat. Acest lucru poate fi testat prin oprirea MySQL și punerea în execuție mysql.server cu argument de start:
shell#bin/mysqladmin –u root shutdown
shell#chmod u+x support-filles/mysql.server
shell#support-files/mysql.server start
Pasul final este acela de setare a locului unde programele client,pe care le veți utiliza în administrarea serverului MySQL,în calea sistemului(system path). Lucrul acesta se face prin plasarea legăturilor simbolice (symbolic links) către mysql.mysqldump în directorul /user /local/bin.
shell#ln –s /user/local/mysql/bin/mysql /user/local/bin/mysql
shell#ln –s /user/local/mysql/bin/mysqladmin/user/local/bin/mysqladmin
shell#ln –s
/user/local/mysql/bin/mysqldump/user/local/bin/mysqldump
3.4.2 Instalarea MySQL pe platforma Windows
MySQL se poate descărca și pe sistemul de operare Microsoft Windows de la adresa http://www.mysql.com/downloads/ .După ce fișierul este descărcat,el trebuie să fie despachetat și se rulează fișierul setup.exe conținut în pachet. Există în prezent un proiect în stadiul beta al unui utilitar de instalare modern pentru Windows numit ”MySQL Installer for Windows” care simplifică radical procesul de instalare al serverului pentru utilizatorii Windows,proiect ce cuprinde următoarele elemente:
-MySQL Server 5.6 GA
-MySQL Workbench 5.2 GA
-MySQL Connectors (.net/ODBC/Java/C/C++) GA
-MySQL Samples and Examples 5.6
-MySQL Documentation 5.6
În versiunea 32 și 64 bit este inclus fiecare produs.Versiunea corectă este instalată automat în sistemul dumneavoastră. Pentru a putea răspunde cererilor de informație în orice moment serverul MySQL trebuie să ruleze în fundal(background) . În subdirectorul bin al directorului unde MySQL fost instalat poate fi găsit acest program. Numele fișierului poate fi diferit :
– mysqld.exe este versiunea de bază a MySQL. Această versiune include suport pentru toate facilitățile avansate și conține cod de depanare pentru a se putea avea la îndemână informații adiționale în cazul unui crash.
– mysqld-opt.exe este o versiune ce nu conține cod de depanare și îi lipsește și câteva facilități avansate,însă rulează rapid pe procesoarele moderne.
– mysqld-nt, o versiune compilată și optimizată la fel ca și mysql-opt, aceasta este destinată rulării pe:Windows NT/2000/XP/Server 2000/Server 2003/Server 2008 ca serviciu.
– mysqld-max.exe. este o versiune similară versiunii mysqld-opt dar conține în plus și facilități avansate.
– mysqld-max-nt.este o versiune similară versiunii mysql-nt dar conține în plus și facilităti avansate.
Versiunile mai sus menționate sunt instalate în subdirectorul bin. În mediile bazate pe Windows NT pornirea MySQL este puțin diferită. Mai jos vom exemplifica procedura pentru sistemele Windows 95/98 :
Primul pas este deschiderea unui MS-DOS Comand Prompt,iar în directorul MySQL va rula comanda:
C:\mysql\bin>mysqld-opt
Comanda de mai sus lansează serverul. Se poate închide fereastra Command Prompt pentru că de acum serverul rulează în fundal. Se va proceda la crearea unui fișier de scurtătură,ce va fi plasat în directorul de pornire(Startup), pentru ca serverul MySQL să ruleze la pornirea sistemului.
MySQL, în mediul Windows NT trebuie instalat ca serviciu. Procedura este următoarea:
O fereastră de command prompt se deschide (opțiune aflată în cadrul Acessories din meniul Start) și se va rula fișierul serverului ales urmat de opțiunea –install,astfel:
C:\mysql\bin\mysqld-nt –install
Service successfully installed.
Procedura de mai sus va instala MySQL ca serviciu,ce va rula la următoarea pornire a sistemului. Fără a reporni sistemul se poate face pornirea manuală a serviciului cu ajutorul următoarei comenzi:
C:\>net start mysql
The MySQL service is starting.
The MySQL service was started successfully.
3.4.3 Instalarea MySQL pe platforma Mac
Acest sub-capitol tratează instalarea serverului MySQL pe sistemul de operare MacOS X.
Primul pas în instalarea serverului MySQL constă în setarea variabilei shell. Pentru a determina locul în care sistemul va căuta programele gen linie-de-comandă se utilizează variabila PATH. Se folosește un editor la alegere,pentru a creea și a edita un fișier în directorul home al profilului dumneavoastră numit .profile. În acest fișier se include linia:
ExportPATH=”/user/local/bin:/user/local/sbin:/user/local/mysql/bin:$PATH”
Se salvează fișierul,apoi puteți lansa comanda:
source ~ /.profile
Obținerea fișierelor necesare instalării serverului este pasul următor. Se creează un director ce va conține fișierele pe care le vom descărca și apoi compila.
Un nou utilizator se creează folosind următoarea comandă:
mkdir ~/src
cd ~/src
Se descarcă ultima versiune corespunzătoare sistemului de operare OS X Snow Leopard, de la adresa http://www.mysql.com , apoi se copiază conținutul în directorul src.
Un alt pas este compilarea și instalarea pachetului descărcat care se realizează utilizând următoarea comandă:
tar xzvf mysql -5.5.tar.gz
Cd mysql-5.5
./configure –prefix=/user/local/mysql –with-extra-charsets=complex \
–enable-thread-safe-client –enable-local-infile –enable-shared\
–with-plugins=innobase make
sudo make install cd /user/local/mysql
sudo ./bin/mysql_install_db –user=mysql
sudo chown –R mysql ./var
cd..
Se dorește în mod frecvent ca serverul MySQL să fie rulat în mod automat odată cu pornirea sistemului. Următorul exemplu arată un script launchd care pornește serverul MySQL la încărcarea sistemului,pe care îl va opri la inițierea procedurii de închidere a sistemului:
cd ~/src
curl –o http://hivelogic.com/downloads/com.mysql.mysqld.plist
sudo mv ~/src/com.mysql.mysqld.plist /Library/LaunchDaemons
sudo chown root /Library/LaunchDaemons/com.mysql.mysqld.plist
La pornirea MySQL, se specifică unui launchd să ruleze.
Sudo launchctl load –w /Library/LaunchDaemons/com.mysql.mysqld.plist
Dacă nu primește un răspuns totul a decurs bine și MySQL rulează.
O verificare în acest sens se face astfel:
mysql –uroot
La afișare va apărea pe ecran următoarea secvență:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.1.37 Source distribution
Type 'help;' or 'h' for help.Type 'c' to clear the buffer.
mysql>
Dacă acest mesaj nu apare ,probabil ceva nu a mers bine sau se poate ca unul dintre pașii precedenți să fi fost omiși.
Pentru a oprii serviciului manual se utilizează codul următor:
sudo launchct1 unload –w /Library/LaunchDaemons/com.mysql.mysqld.plist
Se utilizează secvența următoare,utilă pentru restartarea serviciului:
sudo lauchct1 load –w /Library/LaunchDaemons/com.mysql.mysqld.plist
3.5 Autentificarea la MySQL
Prin conectarea la serverul MySQL și introducerea unor comenzi,una câte una se poate efectua lucrul cu bazele de date MySQL. Pentru o astfel de conexiune este nevoie de un program client,aplicația de acest gen fiind deja inclusă în pachetul MySQL,indiferent pe ce platformă s-a efectuat instalarea. Dacă se folosește o soluție comercială de găzduire, caz în care serverul MySQL nu este găzduit pe sistemul dumneavoastră,atunci aveți două modalități de conectare la serverul MySQL. Prima soluție pentru conectarea la serverul Web care asigură găzduirea urmând ca de pe aceeași mașină să se ruleze MySQL.O altă soluție ar fi,ca de pe adresa http://www.mysql.com să se descarce și instaleze clientul MySQL,care este disponibil în mod gratuit.Serviciul dumneavoastră funcționează de găzduire vă oferă prima,a doua sau ambele posibilități,în concluzie ambele funcționează bine.Din cauza unormotive de securitate multe servicii de găzduire nu oferă accesdirect la serverele MySQL prin Internet.Deci prin urmare nu vă ajută la nimic instalarea clientului MySQL pe mașina dumneavoastră,dacă gazda dumneavoastră a adoptat o astfel de politică.În acest caz,în site-ul dumneavoastră phpMyAdmin (cel mai cunoscut script web) va trebui să instalați un script Web de administrare.Multe servicii de găzduire congigurează contul dumneavoastră cu o copie instalată a phpMyAdmin.Veți fi nevoit să utilizați la un moment dat o linie de comandă,indiferent de metoda sau sistem de operare utilizat.Lansarea clientului MySQL se face în felul următor:
mysql –h hostname –u username –p
-hostname va fi înlocuit cu numele serverului dumneavoastră de găzduire sau adresa IP a acestuia. Dacă pe aceeași mașină ca și serverul rulează programul client ,puteți renunșa la partea de –h hostname din argument.
-username va trebui să fie înlocuit cu utilizatorul MySQL. Serverul va fi root,dacă serverul MySQL a fost instalat de dumneavoastră. Dacă se utilizează serverul MySQL al unui serviciu de găzduire,atunci compania care oferă acest serviciu,vă poate pune la dispozitie și numele.
-p reprezintă argumentul care transmite programului să ceară parola,ce va trebui introdusă imediat după introducerea comenzii mai sus menționate.Dacă dumneavoastră a-ti instalat serverul ,atunci parola este aceea pe care dumneavoastră a-ti setat-o în momentul instalării.În situația în care utilizați serviciul de găzduire web,parola se obține de la compania ce oferă acest serviciu.
Clientul MySQL se va încărca și va prezenta o linie de comandă, după introducerea acestei comenzi:
mysql>
Pasul următor ar trebui să fie setarea bazei de date cu care se lucrează.În prima fază, se începe prin afișarea pe serverul curent a unei liste a bazelor de date disponibile.Pentru a afișa acest lucru se utilizează comanda:
mysql>SHOW DATABASES;
fără a se omite simbolul ”;”
Lista cerută va fi afișată ca răspuns al MySQL.Va apărea pe ecran ceva similar cu afișarea următoare,dacă avem de a face cu o instalare nouă a acestuia:
Database
mysql
test
2 rows in set (0.11 sec)
Pentru gestionarea utilizatorilor ,parolelor și drepturilor de securitate ale acestora MySQL utilizează baza de date „mysql”.A doua bază de date numită „test” este un exemplu de bază de date. Această bază poate fi ștearsă în siguranță. Se numește „dropping”,operațiunea de ștergere a unei baze de date în MySQL,iar comanda corespunzătoare ștergerii este următoarea:
mysql>DROP DATABASE test;
Dacă comanda de mai sus este tastată,urmată de apăsarea tastei enter,MySQL va trece la ștergerea bazei de date indicate și va afișa pe ecran următorul mesaj: „Query OK”,ca mesaj de confirmare.Așadar nu veți primi nici un fel de mesaj de confirmare a operațiunii de ștergere,prin urmare este necesar ca aceste comenzi să fie tastate cu precauție,deoarece cum a-ți putut observa în exemplul de mai sus se poate șterge o bază de date completă doar prin utilizarea unei singure comenzi. Trebuie precizat că orice comandă trebuie să fie terminată de „ ; ”în cazul liniei de comandă MySQL. Omiterea acestui caracter va face ca interpretorul de comenzi să aștepte în continuare alte comenzi,aflate chiar pe liniile următoare,așteptând să apară caracterul „ ; ”.
mysql>SHOW
->DATABASES;
Se va ignora toată comanda dacă la sfârșitul unei comenzi se găsește secvența „\c”,și va putea fi scrisă în următoarea linie o nouă comandă de executare,precum:
mysql>DROP DATABASE\C
mysql>
Va trebui să tastați comanda quit sau exit,în orice moment doriți să părăsiți consola MySQL.Acestea fiind singurele comenzi care pot fi executate fără „ ;”la sfârșit.
mysql>quit
Bye
3.6 Crearea unei baze de date în MySQL
Există posibilitatea ca o bază de date să fie deja creată și dată spre folosința dumnevoastră dacă utilizați un serviciu de găzduire, și va trebui să creați o bază de date dacă serverul este instalat de dumneavoastră.După cum am văzut în capitolul anterior,o bază de date poate fi creată la fel de simplu cum poate fi și ștearsă.
mysql>CREATE DATABASE ziar;
Va fi nevoie să înștiințăm MySQL să folosească această bază de date pentru comenzile pe care le vom introduce,după operațiunea de creare a bazei de date
mysql>USE ziar;
Veți putea utiliza baza de date creată,din acest moment.Cunoscând faptul că în acest moment aceasta este goală,va trebui să crrem niște tabele.Mai jos vom crea un tabel care va conține articolele ziarului nostru.
3.6.1 Crearea unei tabele într-o bază de date MySQL
Dat fiind faptul că o tabelă areo structură flexibilă,comanda creări unei asemenea tabele va fi astfel ceva mai complicată,spre deosebire de comenzile MySQL pe care le-am întâlnit până acum care erau foarte simple .Crearea unei tabele va avea sintaxa următoare:
mysql>CREATE TABLE nume_tabela
->nume_coloana_1 tip_coloana_1 detalii_coloana_1
->nume_coloana_2 tip_coloana_2 detalii_coloana_2
->….
->);
Să revenim la primul nostru exemplu,de la începutul acestui capitol, unde tabela din baza de date exemplificată,va fi creată cu ajutorul comenzii:
mysql>CREATE TABLE articole (
->ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
->Titlu_articol VARCHAR (50),
->Autor VARCHAR (50),
->Data_pub DATE NOT NULL
-> );
Analizăm mai atent cele listate mai sus:
prima linie fiind foarte simplă,comunică serverului MySQL să creeze o tabelăcun numele „articolului”.
linia următoare definește o coloană numită „ID” care va fi de tip întreg,urmată de câțiva parametrii ce specifică anumite detalii ale coloanei,și nu se permite ca, câmpul destinat colanei „ID”să poată fi lăsat gol (atributul NOT NULL specifică acest lucru),specificația „AUTO_INCREMENT” înștințează MySQL că în acest câmp nu este nevoie să fie introdus manual un număr întreg ci va fi completat în mod automat,efectuîndu-se incrementări cu fiecare înregistrare din tabelă pe această coloană.Poate fi menționat faptul că toate înregistrările din această colană trebuie să fie unice sau („PRIMARY KEY”) astfel această colană va avea rolul de identificator unic pentru înregistrările din tabel.
a treia linie este foarte simplă,ea definind o coloană intitulată „Titlul_articol”ce va conține text,mai precis un șir de caractere variabil cu dimensiunea maximăde 50 de caractere (VARCHAR (50))
linia a patra este similară cu cea precedentă,cu deosebirea că aceasta va avea denumirea de „Autor” și este tot de tipul (VARCHAR(50))
linia următoare definește ultima coloană numită „Data_pub” ce conține tipul de date DATE și atributul NOT NULL ce specifică faptul că nu poate fi lăsat gol.
Pe un sistem UNIX numele bazelor de date și al tabelelor vor avea proprietatea de a fi case sensitive, adică nu există diferență între textul scris cu majuscule sau caractere normale ,pe celelalte siteme comenzile nu sunt case sensitive.Cu alte cuvinte ,MySQL este case insensitive,deci nu face distincția între majuscule și caractere normale,totuși au o excepție:tabelele,coloanele și alte nume trebuie scrise exact la fel atunci când sunt utilizate mai mult de o dată în aceeași comandă.Trebuie specificat însă de fiecare dată tipul de date al fiecărei coloane create „ID” va conținenumere întregi (INT), „Titlu_Articol” și „Autor” va conține text (TEXT),iar „Data_pub” va conține date calendaristice (DATE).
Introduceți următoarea comandă,pentru a verifica dacă tabela a fost creată corespunzător:
mysql>SHOW TABLES;
Pe ecran va fi afișat următorul mesaj:
Tables in ziar
Articole
1 row in set
Următoarea secvență este o listă a tabelelor din baza noastră de date numită „ziar”.Lista conține o tabelă numită „articole,creată recent”.Tabela „articole”va arăta în felul următor:
mysql>DESCRIBE articole;
4 rows in set
În această tabelă avem după cum se poate observa patru coloane,care apar sub forma a patru rânduri în acest tabel rezultat. La fel de simplu ca și ștergerea unei baze de date se realizează și ștergerea unei tabele,astfel:
mysql>DROP TABLE articole;
3.6.2 Inserarea datelor într-o tabelă dintr-o bază de date MySQL
Fiind creată baza de date și având definită o tabelă,se trece la efectuarea operațiilor de introducere a datelor.Comanda folosită pentru introducerea datelor este INSERT.Sunt disponibile două modalități ale acestei comenzi:
mysql>INSERT INTO nume_tabela SET
->NumeColoana1 = valoare1,
->NumeColoana2 = valoare2,
-> …
->;
mysql>INSERT INTO nume_tabela
->(NumeColoana1, NumeColoana2,…)
->VALUES (valoare1, valoare2,…);
Dacă aplicăm această comandă pentru introducerea de date în exemplul nostru vom avea:
mysql>INSERT INTO articole SET
->Titlu_articol = „Primul numar al ziarului nostru”,
->Autor = „Ionescu Mihai”,
->Data_pub = „09-06-2014”;
mysql>INSERT INTO articole
->(Titlu_articol,Autor,Data_pub)VALUES (
->(„Primul numar al ziarului nostru”,„Ionescu Mihai”,„09-06-2014”);
În cea de-a doua formă a comenzi INSERT,se remarcă faptul că ordinea în care este listată coloana,trebuie să se potrivească cu ordinea în care sunt introduse valorile corespunzătoare acestora.
3.6.3 Tipuri de date
Va trebui specificat tipul fiecărei date din fiecare coloană,de fiecare dată când se creează o tabelă în MySQL.Pentru a personaliza modul în care datele pentru coloane sunt stocate sau afișate,multe tipuri de coloane pot accepta parametri opționali.Pentru început avem parametri A și B care sunt indicați în paranteze pătrate atunci când sunt opționali,urmând mediat după numele tipului coloanei.
Parametrul A se utilizează pentru a specifica mărimea afișajului,ca și exemplu numărul maxim de caractere,ce poate fi folosit de către valorile din coloane. Acesta va limita în multe cazuri, intervalul care poate fi specificat în coloană.A poate fi de tipul întreg cu valori cuprinse între 1 și 255.Pentru tipul întreg (INT),este de remarcat faptul că acest parametru nu restricționează intervalul valorilor care pot fi stocate,în schimb poate adăuga spații(zero-uri în cazul unei coloane ZEROFFIL) la valori astfel încât să se ajungă la lungimea de afișare dorită.Trebuie evitate pe cât posibil situațiile în care stocarea valorilor mai mari decât lungimea de afișaj pot cauza probleme când valorile sunt utilizate în operațiile de tip JOIN complexe .
Parametrul B se utilizează pentru a specifica numărul zecimalelor ce vor fi stocate pentru o valoare cu virgulă mobilă(floating-point),acesta putând fi setat cu o valoare de maxim 30,dar valoarea A va trebui să fie mai mică sau egală cu A-2 pentru a permite suficient spațiu pentru un zero și un punct decimal.
Tipul următor de parametri este constituit dintr-o coloană opțională de atribute.Pentru fiecare coloană în parte sunt listate atributele suportate de diferitele tipuri de coloane și sunt activate prin simpla lor adăugare după tipul coloanei separate prin spații.
Coloanele au următoarele atribute:
ZEROFILL –specifică valorile coloanei ce ocupă întotdeauna valoarea maximă de afișaj,valoarea actuală fiind completată cu zerouri.
UNSIGNED –specifică că,coloana poate accepta doar valori numerice pozitive (sau zero).Restricția aceasta eliberează mai mult spațiu de stocare pentru numerele pozitive,dublând intervalul valorilor pozitive ce pot fi stocate în coloane și trebuie specificată dacă se știe că nu se vor stoca valori negative
BINARY –Implicit,în MySQL comparația valorilor caracterelor este case sensitive.Prin urmare comparația pentru coloanele BINARY este case sensitive.
Tipuri numerice
TINIYINT [(M) ] – descrie o valoare de tip întreg foarte mică și permite atribute de tip unsigned si zerofill
Spațiul de stocare :(8 biți) -1 octet
Interval: -128-127 (0-255 pentru Unsigned )
SMALLINT [(M)] – descrie o valoare de tip întreg mică,ce permite atribute de tip unsigned și zerofill
Spațiul de stocare: (16 biți) -2 octeți
Interval: -32768 -32767 (0 – 65535 pentru Unsigned)
MEDIUMINT [(M)] – descrie o valoare de tip intreg ,medie, și permite atribute de tip unsigned,zerofill
Interval: -8588608 -8388607 (0 -16777215 pentru Unsigned)
INT [(M)] – descrie o valoare de tip întreg și permite atribute de tip unsigned și zerofill
Spațiul de stocare: (32 biți) – 4 octeți
Interval: -2147483648 -2147483647 (0-16777215 pentru Unsigned)
Sintaxa alternativă: INTEGER [(M)]
BIGINT [(M)] – descrie valoare de tip întreg mare și acceptă ca atribute tipul unsigned și zzerofill
Spațiul de stocare: (64 biți) – 8 octeți
Interval: -9223372036854775808 – 9223372036854775807 (0 – 18446744073709551615 pentru Unsigned)
FLOAT [(M,D)]; FLOAT(precision)
– descrie valoarea unui număr cu virgulă mobilă ce permite atribute de tip zerofill
Spațiul de stocare: (32 biți ) – 4 octeți
Interval: – 0 și –
DOUBLE [(M)]; DOUBLE (precision) – descrie o valoare cu precizie înaltă a unui număr cu virgulă mobilă și permite atribute de tip zerofill
Spațiul de stocare : (64 biți) – 8 octeți
Interval : 0 și până la
DECIMAL descrie valoarea unui număr cu virgulă mobilă stocată sub forma unui string de caractere, are atribute de tip zerofill
Spațiul de stocare: (8M+16 biți) +2 octeți
Interval: 0 și până la constrânse de M și D
Sintaxa alternativă: NUMERIC (M[ ,D])
Tipuri caracter
CHAR (M) descrie un șir de caractere de un număr fix de caractere, ce permite atribute de tip BINARY și are o lungime maximă de M caractere
Spațiul de stocare: (8M biți) M octeți
Sintaxa alternativă: CHARACTER(M)
VARCHAR(M) descrie un șir de caractere de un număr variabil de caractere, permițând atribute de tip BINARY,și o lungime maximă de M caractere
Spațiul de stocare: lungimea valorii stocate, plus 1 octet pentru stocarea lungimii
Sintaxa alternativă: CHARACTER VARYING(M)
TINYBLOB, TINYTEXT descrie un șir de caractere scurt, de un număr variabil de caractere și are o lungime maximă de 255 caractere
Spațiul de stocare: lungimea valorii stocate, plus 1 octet pentru stocarea lungimii
BLOB, TEXT descrie un șir de caractere cu lungime variabilă, având o lungime maximă de 65535 caractere (65 KB)
Spațiul de stocare: lungimea valorii stocate, plus 2 octeți pentru stocarea lungimii
MEDIUMBLOB, MEDIUMTEXT descrie un șir de caractere mediu, cu lungime variabilă,având o lungime maximă de 16777215 caractere (16.8 MB)
Spațiul de stocare:lungimea valorii stocate,plus 3 octeți pentru stocarea lungimii
LONGBLOB, LONGTEXT descrie un șir de caractere lung, cu lungime variabilă,are o lungime maximă de 4294967295 caractere (4.3 GB)
Spațiul de stocare: lungimea valorii stocate, plus 4 octeți pentru stocarea lungimii
ENUM(valoare1 , valoare2,…) descrie un set de valori ,din care o singură valoare trebuie aleasă pentru fiecare rând, lungimea maximă fiind reprezentată de o valoare aleasă din 65535 de posibilități
Spațiul de stocare: 1 la 255 valori: 1 octet (8 biți)
256 la 65535 valori : 2 octeți (16 biți)
SET (valoare1,valoare2,…) descrie un set de date care pot fi sau nu setate,având o lungime maximă de până la 64 valori dintr-o coloană SET
Spațiul de stocare : 1 la 8 valori : 1 octet ( 8 biți)
9 la 16 valori : 2 octeți (16 biți)
17 la 24 valori : 3 octeți (24 biți)
25 la 32 valori : 4 octeți (32 biți)
33 la 64 valori : 8 octeți (64 biți)
Tipuri dată/timp
DATE –descrie stocarea datei, folosind ca spațiu de stocare 3 octeți (24 biți)
Interval : ”1000-01-01” la ”9999-12-31” și ”0000-00-00”
TIME –descrie stocarea orei, folosind ca spațiu de stocare 3 octeți (24 biți)
Interval: ” -838:59:59” la ”838:59:59”
DATETIME -descrie stocarea datei și oreifolosind ca spațiu de stocare 8 octeți (64 biți)
Interval : ”1000-01-01 00 :00 :00” la ”9999-12-31 23 :59 :59”
YEAR –descrie stocarea anului folosind ca spațiu de stocare 1 octet (8 biți)
Interval : 1901 la 2155 și 0000
TIMESTAMP –descrie stocarea datei și orei în format YYYYMMDDHHMMSS, folosind ca spațiu de stocare 4 octeți (32 biți)
Interval : 19700101000000 la 2037 pe sistemele curente
3.6.4 Vizualizarea datelor stocate
Pentru vizualizarea datelor stocate dintr-o tabelă se utilizează comanda SELECT,fiind și cea mai complicată comandă din cadrul limbajului SQL.Vom efectua niște operații de listare ,pentru început.Comanda următoare va lista datele stocate în tabela articole.
mysql> SELECT* FROM articole;
Comanda de mai sus poate fi citită "Selectează tot din articole", ce va afișa pe ecran următoarele:
3 rows in set (0.00 sec)
Pentru a afișa numai anumite părți din acest tabel, făcând abstracție de unele coloane, vom modifica comanda de mai sus prin ânlocuirea lui ” *” care înlocuiesc termenul de ”tot” cu numele coloanelor ce se doresc a fi afișate. Prin urmare, vom avea :
mysql> SELECT ID, Titlu_articol, Autor FROM articole ;
3 rows in set (0.00 sec)
sau :
mysql> SELECT Titlu_articol,Autor, Data_pub FROM articole;
3 rows in set (0.00 sec)
În afara operației de listare ,se pot utiliza anumite funcții. Un exemplu de funcție poate fi LEFT, funcție ce ne permite să afișăm numai un anumit număr de caractere de pe o coloană specificată.
Spre exemplu ,vrem să afișăm doar primele 12 caractere ale coloanei Titlu_articol :
mysql> SELECT ID, LEFT(Titlu_articol, 12),Autor, Data_pub;
COUNT este o altă funcție, ce ne permite să contorizăm numărul rezultatelor returnate. Dacă dorim să aflăm câte articole avem stocate în tabelul nostru din baza de date,putem utiliza comanda :
mysql> SELECT COUNT (*)FROM articole ;
1 row in set (0.00 sec)
Exemplele utilizate mai sus au prelucrat toate înregistrările din tabela noastră,însă dacă adăugăm clauza WHERE,prin intermediul comenzi SELECT vom limita numărul înregistrărilor returnate.
Exemplu:
mysql>SELECT COUNT (*)FROM articole WHERE Data_pub <="2014-02-07";
1 row in set (0.00 sec)
Cu ajutorul acestei comenzi, se va contoriza numărul articolelor care au data ”mai mică sau egală cu” 7 februarie 2014,acest lucru însemnând că se returnează numărul articolelor publicate înainte,cât și în data respectivă.Această comandă mai poate fi utilizată spre a returna un articol publicat de autorii cu numele ”Mihai”:
mysql> SELECT Titlu_articol from articole WHERE Autor LIKE ”%Mihai%”;
1 row in set (0.00 sec)
Pentru o restricționare mai elaborată putem combina condiții adiționale în cadrul clauzei WHERE.Un exemplu poate fi listarea numai a titlului articolelor publicate de către autorul ”Mihai” și numai în luna februarie putem utiliza următorul cod:
mysql> SELECT Titlu_articol FROM articole WHERE Autor LIKE ”%Mihai%” AND Data_pub <=”2014-02-01” AND Data_pub <=”2014-02-29”;
Acest cod va afișa același rezultat ca și mai sus
3.6.5 Modificarea datelor stocate
La un moment dat după introducerea datelor în baza de date ,pot exista anumite cerințe de a face anumite modificări asupra datelor ,fie că dorim să modificăm anumite date din coloanele articolului sau să corectăm anumite erori .Aceste modificări pot fi realizate prin intermediul comenzii UPDATE.Forma ei general este:
mysql> UPDATE nume_tabel SET
->nume_coloana =valoare_noua,…
->WHERE condiții;
Un exemplu ar putea fi modificarea datei publicării unui articol introdus anterior ,pentru care vom utiliza comandă:
mysql> UPDATE articole SET Data_pub =”2014-05-07” WHERE ID = 5;
În felul acesta, a fost schimbată data publicării articolului ce are ID = 5.
Mai jos vom schimba datele tuturor articolelor publicate de autorul care are numele ”Mihai”
mysql> UPDATE articole SET Data_pub = ”2014-05-05”WHERE Autor LIKE ”%Mihai%”;
3.6.6 Ștergerea datelor stocate
În SQL ștergerea înregistrărilor este foarte simplă, având următoarea sintaxă:
mysql> DELETE FROM nume_tabel WHERE condiții;
Următorul exemplu constă în ștergerea tuturor articolelor publicate de către autorul care are numele de ”Mihai”, astfel :
mysql> DELETE FROM articole WHERE Articol LIKE ”%Mihai%”;
WHERE este o clauză opțională, însă se recomandă precauție în utilizarea comenzii,pentru că,dacă vom exclude complet clauza, aceasta va executa asupra tuturor înregistrărilor din tabelă,operația de ștergere.Comanda poate fi folosită și sub forma următoare și va avea ca efect ștergerea tuturor înregistrărilor din tabela articole.
mysql> DELETE FROM articole;
Cap 4 Interacțiunea PHP-MySQL
Pentru a pute extrage conținutul aflat în cadrul unei baze de date MySQL ,conținut folosit într-o pagină web, trebuie să stabilim o conexiune către MySQL prin intermediul unui script PHP.
8.1 Conectarea la MySQL prin PHP
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sisteme Sgbd Paralele (ID: 150570)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
