Sunteți pe pagina 1din 77

Universitatea Constantin Brncui din Trgu-Jiu Facultatea de Inginerie Departamentul de Automatic, Energie i Mediu

Tehnologii Web

Lector univ. dr. Adrian Runceanu

Curs 10

MySQL (partea I)

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

3
Tehnologii WEB

curs 10 2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

4
Tehnologii WEB

Spre

deosebire de fisiere, bazele de date prezinta multe avantaje, inclusiv o mai mare protectie a integritatii datelor si asigurarea partajarii datelor. acest curs va fi prezentat SQL, limbajul standard pentru crearea, accesul si manipularea bazelor de date relationale.
(cu precadere sintaxa SQL sunt cele referitoare la MySQL), cel mai popular limbaj de baze de date folosit cu PHP.
Tehnologii WEB

In

Detaliile

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

6
Tehnologii WEB

1.1. Structura unei baze de date relationale


O

baza de date relationala stocheaza datele n tabele, iar fiecare tabel stocheaza informatii despre un anumit tip de element. tabel contine linii si coloane.

Un

Fiecare

linie se identifica in mod unic prin intermerdiul unei coloane(camp) unice numite cheie primara.

7
Tehnologii WEB

Aplicatia software care gazduieste o baza de date se numeste "sistem de gestiune a bazelor de date" (SGBD). Exista multe sisteme de gestiune a bazelor de date, printre cele mai populare asemenea sisteme se numara: DB2 Interbase MySQL Oracle Postgresql SQL Server Sybase MySQL este cel mai popular sistem de gestiune a bazelor de date destinat utilizarii cu PHP, n mare masura deoarece este gratuit. Totusi, prin intermediul PHP este posibil accesul la aproape 8 orice SGBD modern.

Tehnologii WEB

Bazele de date relationale nteleg SQL (Structured Query Language), un limbaj relativ simplu, folosit pentru solicitarea datelor. In ciuda simplitatii sale, SQL este un limbaj foarte puternic, care: poate obtine accesul la date stocate n mai multe tabele poate filtra datele dorite si poate sorta, rezuma si afisa rezultatele n general, bazele de date relationale si stocheaza datele ntr-un singur fisier sau catalog. Aceasta caracteristica de organizare faciliteaza administrarea datelor, deoarece executarea copiei de siguranta, respectiv restaurarea unui singur fisier sau catalog se realizeaza mai usor.

Tehnologii WEB

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

10
Tehnologii WEB

1.2. Proiectarea unei baze de date Cand se creaza un tabel intr-o baza de date, este important sa se tina cont de "cheia primara". Coloanele dintr-un tabel trebuie sa se bazeze pe cheia primara n totalitatea sa. O alta operatie importanta este specificarea unui tip de date pentru fiecare coloana. Majoritatea bazelor de date relationale accepta urmatoarele tipuri de date generale: Caracter ntreg Zecimal Data si ora 11 Binar

Tehnologii WEB

Tabelul urmator rezuma tipurile de date cele mai frecvent utilizate, acceptate de MySQL si de majoritatea bazelor de date relationale.
Principalele tipuri de date din MySQL

Tip de date
BLOB CHAR(m) DATE DECIMAL DECIMAL(m,d) DOUBLE DOUBLE (m, d) FLOAT(m,d)
12

Descriere
- Date binare arbitrare, cu o lungime maxima de 65535 octeti - Un sir de caractere de lungime fixa, cu un maxim de m caractere, unde m este mai mic dect 256. Pentru obtinerea lungimii dorite, se insereaza spatii finale - O data n format an-luna-zi; de exemplu 2008-10-15 - Un numar zecimal, reprezentat sub forma de sir cu "m" cifre, din care "d" se afla la dreapta punctului zecimal. Daca "m" si "d" sunt omise, n mod prestabilit se vor utiliza valorile 10 si 0 - Un numar cu virgula mobila, cu dubla precizie, avnd o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula. - Un numar cu virgula mobila, cu simpla precizie, avnd o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula

Tehnologii WEB

INTEGER INTEGER UNSIGNED NUMERIC NUMERIC (m, d) REAL REAL(m, d) SMALLINT SMALLINT UNSIGNED TIME TIMESTAMP TIMESTAMP(m) VARCHAR(m) is_writable()
13

- Un ntreg pe 32 de biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins ntre 0 si 4294967295; n caz contrar, domeniul este cuprins ntre valorile -2147483648 si 2147483647 - Similar cu DECIMAL - Similar cu DOUBLE - Un ntreg pe 16 biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins ntre 0 si 65535; n caz contrar, domeniul este cuprins ntre valorile 32768 si 32767 - Ora n format ora-minut-secunda; de exemplu, 08-20-00. O valoare de tip data si ora, n format an-luna-zi ora-minut-secunda; de exemplu, 1976-01-05 00:00:00. Aceasta reprezentare este similara celei returnate de functiile UNIX si nu poate codifica date situate dincolo de un anumit moment al anului 2037 - Un sir caracter de lungime variabila, cu un maximum de m caractere, unde m este mai mic dect 256. Spatiile finale au fost eliminate

- Returneaza TRUE daca fisierul specificat exista si se poate scrie n acel fisier; n caz contrar, returneaza FALSE

Tehnologii WEB

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea
14
Tehnologii WEB

1.3. Crearea unei baze de date MySQL si a unui tabel

Din punct de vedere practic, o baza de date se creeaza astfel:


La

nceput, o baza de date nu contine tabele.

Pentru

a crea o baza de date si apoi un tabel ntr-o baza de date, se foloseste un sub-limbaj SQL special, cunoscut sub numele de Data Definition Language (DDL).

15
Tehnologii WEB

Se

poate emite comenzi DDL si alte comenzi SQL prin intermediul unui interpretor SQL sau prin intermediul PHP.

Pentru

inceput va fi prezentat modul de emitere a comenzilor SQL folosind un interpretor SQL.

16
Tehnologii WEB

Ca

regula, dupa scrierea comenzilor, la sfarsit trebuie sa fie caracterul "punct si virgula" (;) a crea o baza de date, se foloseste urmatoarea comanda:
DATABASE nume_db;

Pentru

Unde

"nume_db" este numele bazei de date care va fi creata.

17
Tehnologii WEB

Inainte

de a crea un tabel sau a lucra cu alte comenzi intr-o baza de date, trebuie sa se deschida baza de date existenta, acest lucru se face folosind comanda: USE nume_db;

Unde

"nume_db" este numele bazei de date. Cu aceeasi comanda "USE nume_db" se schimba si baza de date in care vrem sa lucram.
18
Tehnologii WEB

Pentru

a crea un tabel ntr-o baza de date, emiteti comanda "CREATE TABLE", care are urmatoarea forma:
CREATE TABLE tabel (coloana tip, coloana tip, );

Unde

"tabel" este numele tabelului, "coloana" este numele unei coloane, "tip" este tipul datelor incluse n coloana, se poate specifica un numar nedefinit de coloane si tipuri.

19
Tehnologii WEB

De

exemplu, comanda urmatoare creeaza un tabel numit "carte", care contine coloanele "carteid", "titlu" si "pret":

CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR(255), pret decimal(5,2));

20
Tehnologii WEB

21

afara tipului de date, intre paranteze, se pot specifica numeroase atribute optionale ale unei coloane: NOT NULL - Fiecare rnd trebuie sa contina o valoare a coloanei asociate; valorile nule nu sunt permise. DEFAULT valoare - Daca nu este data o valoare a coloanei asociate, se va presupune valoarea specificata. AUTO INCREMENT - MySQL va repartiza n mod automat un numar de serie ca valoare a coloanei asociate. PRIMARY KEY - Coloana asociata este cheia primara a tabelului care o contine.

Tehnologii WEB

Un exemplu ceva mai complicat de creare a unui tabel, care foloseste unele atribute optionale:

CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY, titlu VARCHAR(255) NOT NULL, pret DECIMAL(5,2) DEFAULT 50.00);

22
Tehnologii WEB

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

23
Tehnologii WEB

1.4. Stergerea si modificarea unui tabel


Stergerea

unui tabel sau a unei coloane este un act irevocabil, datele fiind definitiv sterse. Pentru a sterge un tabel, se scrie urmatoarea comanda: DROP TABLE tabel; Unde "tabel" este numele tabelului care va fi sters.
Dupa

crearea unui tabel, se poate modifica prin emiterea unei comenzi "ALTER TABLE", care are mai multe forme.
Tehnologii WEB

24

Urmatoarea forma a comenzii va permite sa stergeti o coloana din tabel: ALTER TABLE tabel DROP coloana; Unde "tabel" este numele tabelului care va fi modificat, iar "coloana" este numele coloanei care va fi stearsa. O alta forma a comenzii va permite sa adaugati o noua coloana n tabel: ALTER TABLE tabel ADD coloana tip [optiuni]; Unde "tabel" este numele tabelului care va fi modificat, "coloana" este numele coloanei care va fi adaugata, "tip" este tipul noii coloane, iar "[optiuni]" constituie toate optiunile dorite, precum PRIMARY KEY. De exemplu, pentru a adauga coloana "pretnou" la tabelul "carte", scrieti comanda: 25ALTER TABLE carte ADD pretnou DECIMAL(5,2) DEFAULT

Tehnologii WEB

Pentru

a vedea toate bazele de date create in MySQL, folositi urmatoarea comanda: SHOW DATABASES;
a vedea toate tabelele dintr-o baza de date din MySQL, folositi urmatoarea comanda: SHOW TABLES;

Pentru

Pentru

a vedea toate coloanele dintr-un tabel, si atributele acestora, folositi urmatoarea comanda: SHOW COLUMNS FROM tabel;
Tehnologii WEB

26

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

27
Tehnologii WEB

1.5. Accesul la datele dintr-o baza de date, interogarile SQL


n

afara de Data Definition Language, SQL include Data Manipulation Language (DML).

DML

permite sa se formeze interogari, care obtin accesul la datele aflate ntr-o baza de date relationala si raporteaza aceste date. De asemenea, se poate folosi DML pentru a insera, actualiza si sterge rndurile dintr-un tabel.
28
Tehnologii WEB

Cea mai elementara forma de interogare este comanda "SELECT" simpla. Cea mai simpla interogare raporteaza toate coloanele din toate rndurile unui tabel. Interogarea are urmatoarea forma:

SELECT * FROM tabel;


Unde "tabel" este numele tabelului la care se va obtine accesul. Aceasta comanda va afisa un tabel cu fiecare rnd pe o linie separata si coloanele ntr-o ordine arbitrara. Datele de iesire includ numele coloanelor si linii care separa coloanele.

29
Tehnologii WEB

30

Daca se doreste sa se selecteze numai anumite coloane sau sa se raporteze coloanele ntr-o anumita ordine, se poate folosi urmatoarea forma a comenzii "SELECT": SELECT coloana1, coloana2 FROM tabel; Unde "tabel" este numele tabelului, iar "coloana1" si "coloana2" sunt coloanele la care se va obtine accesul si al caror continut va fi afisat. Puteti specifica mai multe coloane, separate prin virgula. Daca vreti sa fie raportata numai acelor rnduri care satisfac un anumit criteriu, clauza "WHERE" va permite sa specificati o conditie; rndurile care nu satisfac conditia nu sunt raportate.

Tehnologii WEB

De exemplu, iata o interogare care raporteaza un singur rnd: SELECT titlu, pret FROM carte WHERE carteid=1; Forma conditiilor folosite n sub-limbajul DML al limbajului SQL este similara cu aceea a conditiilor PHP. Se poate folosi oricare din urmatorii operatori relationali: = , Egalitate <> , Inegalitate != , Inegalitate < , Mai mic decat > , Mai mare decat <= , Mai mic sau egal cu => , Mai mare sau egal cu

31
Tehnologii WEB

Puteti compara valoarea unei coloane cu aceea a alte coloane, respectiv valoarea unei coloane cu o valoare string. Valorile string SQL (sirurile) trebuie sa fie incluse ntre ghilimele simple, nu ntre ghilimelele duble permise de PHP. Cnd unei coloane nu i-a fost repartizata nici o valoare, SQL i atribuie valoarea speciala NULL. De asemenea, programatorii pot atribui n mod explicit valoarea NULL unei coloane. Comparatiile obisnuite cu valori NULL, care folosesc operatorii de (in)egalitate, vor returna un rezultat fals. Totusi, puteti folosi operatorul special "<=>" care compara valorile tinnd cont de valoarea NULL. Daca folositi acest operator pentru a compara doua valori NULL, se obtine un rezultat adevarat.

32
Tehnologii WEB

SQL include si numerosi operatori de comparatie non-algebrici:


Operator
x BETWEEN y AND z x LIKE y x NOT LIKE y

Descriere
Adevarat, daca valoarea lui x este cuprinsa ntre valorile lui y si z Adevarat daca valoarea lui x este echivalenta cu modelul y Adevarat daca valoarea lui x nu este echivalenta cu modelul y

x IN (y1, y2)
x NOT IN (y1, y2) x IS NULL x IS NOT NULL

Adevarat daca valoarea lui x este un membru al listei y1, y2. Lista poate contine unul, doi sau mai multi membri
Adevarat daca valoarea lui x nu este un membru al listei y1, y2. Lista poate contine unul, doi sau mai multi membri Adevarat daca x are valoarea NULL Adevarat daca x nu are valoarea NULL

33
Tehnologii WEB

Sub-limbajul

folosit pentru specificarea modelelor asociate operatorului "LIKE" este diferit de cel folosit de PHP. Meta-caracterul "%" corespunde unui numar de zero sau mai multe caractere, iar metacaracterul "_" corespunde unui singur caracter. Modelele, precum sirurile, sunt incluse ntre ghilimele simple. De exemplu, modelul '%ar%' corespunde oricarui sir care contine sub-sirul 'ar', inclusiv siruri precum 'ar', 'arc' si 'un zar'.
34
Tehnologii WEB

Pentru a plasa un caracter "%" sau "_" ntr-un sir test, folositi secventa "\%" sau "\_"; ca n PHP. Ca si PHP, sub-limbajul DML din SQL va permite sa formati expresii logice care combina expresiile relationale.

Puteti folosi oricare din urmatorii operatori logici: AND , && - Sl, adevarat daca ambii operanzi sunt adevarati OR , || - SAU, adevarat daca un operand este adevarat NOT , ! - NU, adevarat daca operandul este fals

35
Tehnologii WEB

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

36
Tehnologii WEB

1.6. Modificarea datelor dintr-o baza de date

Sub-limbajul SQL, Data Manipulation Language, include comenzi care: 1. permit inserarea de rnduri noi ntr-un tabel 2. actualizarea uneia sau mai multe coloane ale rndurilor existente 3. respectiv stergerea unor rnduri dintr-un tabel

37
Tehnologii WEB

1. Pentru a insera un nou rnd ntr-un tabel, folositi comanda "INSERT", care are urmatoarea forma: INSERT INTO tabel VALUES (valoare1, valoare2);
Unde "tabel" este numele tabelului la care se va adauga rndul, "valoare1" este valoarea pentru prima coloana din tabel, iar "valoare2" este valoarea celei de-a doua coloane din tabel. Se pot da mai mult sau mai putin de doua valori; numarul valorilor date trebuie sa fie egal cu acela al coloanelor din tabel. O coloana poate primi si valoarea "NULL", cu exceptia situatiilor cnd definitia coloanei nu permite.

38
Tehnologii WEB

O forma mai buna (si recomandata) a comenzii INSERT specifica numele coloanelor carora le sunt atribuite valorile: INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2); Unde coloana denumita "coloana1" primeste valoarea "valoare1", iar coloana denumita "coloana2" primeste valoarea "valoare2". Pot fi specificate mai mult sau mai putin de doua coloane si valori. Numarul coloanelor specificate trebuie sa fie egal cu numarul valorilor specificate. Coloanele care nu sunt denumite n comanda "INSERT" si care nu au o valoare prestabilita (DEFAULT) primesc valoarea NULL, cu exceptia situatiilor cnd valoarea respectiva nu este permisa (n acest caz, comanda INSERT esueaza).

39
Tehnologii WEB

Daca doriti sa adaugati mai multe randuri intr-un tabel, puteti folosi urmatoarea forma a comenzii INSERT:

INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2), (valoare3, valoare4), (valoare5, valoare6);

40
Tehnologii WEB

2. Pentru a modifica valoarea unui rnd sau mai multor rnduri existente ntr-un tabel, folositi o comanda "UPDATE", care are urmatoarea forma: UPDATE tabel SET coloana1=valoare1, coloana2=valoare2 WHERE conditie; Unde "tabel" este numele tabelului ale carui rnduri urmeaza sa se modifice, "coloana1" este numele primei coloane care urmeaza a fi modificata, "valoare1" este valoarea care va fi repartizata n "coloana1", "coloana2" este numele celei de-a doua coloane care urmeaza a fi modificata, "valoare2" este valoarea care va fi repartizata n "coloana2", iar "conditie" identifica rndul sau rndurile care urmeaza a fi actualizate. Poate fi actualizat un numar mai mare sau mai mic de coloane. Daca urmeaza ca fiecare rnd al coloanei sa fie actualizat, 41 clauza "WHERE" poate fi omisa.
Tehnologii WEB

De exemplu, comanda urmatoare modifica numele asociat titlului cartii al carui atribut pret are valoarea 5, n "Curs2"

UPDATE carte SET titlu=Curs2 WHERE pret=5;

42
Tehnologii WEB

3. Pentru a sterge un rnd dintr-un tabel, folositi comanda "DELETE", care are urmatoarea forma:

DELETE FROM tabel WHERE conditie;


Daca vor fi sterse toate rndurile tabelului, clauza WHERE poate fi omisa. De exemplu, comanda urmatoare sterge rndul din tabelul "carte" asociat titlului "Curs2":

DELETE FROM carte WHERE titlu='Curs2';

43
Tehnologii WEB

curs 10 1. Notiuni fundamentale despre bazele de date si SQL 1.1. Structura unei baze de date relationale 1.2. Proiectarea unei baze de date 1.3. Crearea unei baze de date MySQL si a unui tabel 1.4. Stergerea si modificarea unui tabel 1.5. Accesul la datele dintr-o baza de date, interogarile SQL 1.6. Modificarea datelor dintr-o baza de date 1.7. Sortarea si gruparea

44
Tehnologii WEB

1.7. Sortarea si gruparea Deseori, este important ca datele sa fie raportate ntr-o anumita secventa. Puteti specifica ordinea de raportare a rezultatelor interogarii folosind clauza "ORDER BY", care are urmatoarea forma: ORDER BY valoare Daca se vor folosi mai multe cmpuri de sortare, acestea vor fi separate prin virgula. Daca doriti sa indicati o sortare descendenta, n locul uneia ascendente, specificati "DESC" dupa valoare.

45
Tehnologii WEB

De exemplu, pentru a ordona toate cartile n functie de pret, de la cel mai mare la cel mai mic, respectiv dupa titlu pentru un pret dat, puteti folosi urmatoarea interogare: SELECT pret, titlu FROM carte ORDER BY pret DESC, titlu; Pentru a include numai titlurile care au un pret mai mare de 50, adaugati o clauza WHERE la comanda SELECT: SELECT pret, titlu FROM carte WHERE pret>50 ORDER BY pret DESC, titlu;

46
Tehnologii WEB

SQL include functii care permit sa se raporteze valori diferite valori utile, precum un numar al rndurilor tabelului.
Functie count(*) count(coloana) count(distinct coloana) avg(coloana) Descriere
- Numarul rndurilor din tabel - Numarul rndurilor din tabel care contin o valoare diferita de NULL n coloana specificata - Numarul valorilor distincte diferite de NULL care apar n coloana specificata - Valoarea mijlocie (medie) a coloanei numerice specificate

min(coloana) max(coloana) sum(coloana)


47

- Valoarea minima din coloana specificata


- Valoarea maxima din coloana specificata

- Suma valorilor din coloana specificata

Tehnologii WEB

De exemplu, interogarea urmatoare raporteaza numarul cartilor si pretul mediu al acestora: SELECT count(*), avg(pret) FROM carte; Datele de iesire vor fi afisate pe o singura linie. Clauza SQL "AS" specifica un nume nou pentru o coloana sau expresie. Numele specificat este folosit ca titlu n rapoartele SQL. Clauza "AS" este utila n lucrul cu functiile din tabelul anterior, va ajuta sa identificati mai usor datele de iesire. De exemplu, interogarea precedenta poate fi rescrisa pentru a include o clauza "AS", astfel: SELECT count(*) AS Carte_Numar, avg(pret) AS Pret_Mediu FROM carte;

48
Tehnologii WEB

O alta clauza utila este "GROUP BY", aceasta are urmatoarea forma:

GROUP BY coloana-sortare

Unde "coloana-sortare" este numele sau valoarea unei coloane, specificata ntr-o clauza "ORDER BY", care trebuie sa urmeze dupa clauza "GROUP BY".

49
Tehnologii WEB

De exemplu, avem un tabel "carte" cu 4 coloane (carteid, titlu, anul si pret), interogarea urmatoare raporteaza numarul cartilor si pretul mediu pentru fiecare an (anul) n parte:

SELECT count(*), avg(pret) FROM carte GROUP BY anul ORDER BY anul;

50
Tehnologii WEB

Pentru a include n datele de iesire numai grupurile selectate, specificati clauza "HAVING" imediat dupa clauza "GROUP BY". Clauza "HAVING" are urmatoarea forma:

HAVING conditie

De exemplu, pentru a include numai cartile al caror atribut "anul" are valoare mai mare dect 1990, scrieti urmatoarea interogare: SELECT count(*), avg(pret) FROM carte GROUP BY anul HAVING anul>1990 ORDER BY anul;

51
Tehnologii WEB

curs 10

2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

52
Tehnologii WEB

2. 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 acces 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_utilizator, parola)

53
Tehnologii WEB

Unde "nume_gazda" este numele gazdei pe care ruleaza serviciul MySQL, "nume_utilizator" este numele utilizatorului care se conecteaza la serverul MySQL, iar "parola" este parola MySQL asociata utilizatorului. In cazul in care serverul MySQL ruleaza pe acelasi computer ca si modulul PHP, parametrul "nume gazda" este localhost . In alte cazuri, daca serverul MySQL ruleaza pe un alt computer, va trebui sa specificati adresa computerului pe care ruleaza serverul MySQL. Functia returneaza FALSE n caz de esec; n caz contrar, returneaza o valoare denumita identificator de legatura, care serveste ca instrument de manipulare pentru accesul la serverul MySQL.

54
Tehnologii WEB

Exemplu de invocare a functiei mysql_connect():

<?php $dbh = mysql_connect( "localhost", "Costica", "mypass") or die("Unable to connect to MySQL"); print "Connected to MySQL <br />"; ?>

55
Tehnologii WEB

In acest exemplu, serverul MySQL ruleaza pe aceeasi gazda cu modulul PHP, de aceea s-a folosit argumentul "localhost", utilizatorul este "Costica" iar parola "mypass". Dupa executia acestui script, daca nu se reuseste conectarea la MySQL, va aparea mesajul "Unable to connect to MySQL", in caz de reusita, apare mesajul "Connected to MySQL" n mod prestabilit, functia mysql_connect() se conecteaza la serviciul MySQL prin intermediul portului 3308, portul MySQL standard. Daca doriti sa obtineti accesul la un server MySQL care ruleaza pe un port non-standard, puteti atasa un caracter doua puncte si numarul portului dorit la argumentul care contine numele gazdei; de exemplu, "localhost:3308".

56
Tehnologii WEB

curs 10

2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

57
Tehnologii WEB

2.2. Incheierea conexiunii la serverul MySQL


Pentru

terminara unei conexiuni la serverul MySQL se foloseste instructiunea: mysql_close(); Aceasta functie inchide conexiunea curenta. Functia returneaza TRUE n caz de reusita; n caz contrar, returneaza FALSE. n general, nu este necesara invocarea functiei mysql_close(), deoarece PHP nchide automat conexiunile deschise cu bazele de date atunci cnd un script si ncheie executia.
58
Tehnologii WEB

Exemplu de conectare la serverul MySQL si inchidere a conexiunii folosind functia mysql_close():

<?php $dbh = mysql_connect( "localhost", "Costica", "mypass") or die("Unable to connect to MySQL");


// Aici adaugati datele necesare lucrului cu serverul MySQL

mysql_close(); ?>
59
Tehnologii WEB

curs 10

2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

60
Tehnologii WEB

2.3. Detectarea aparitiei erorilor


Biblioteca

MySQL din PHP furnizeaza doua functii de verificare a erorilor, si anume:


mysql_errno() mysql_error()

Fiecare

functie returneaza un rezultat care reflecta eroarea, daca aceasta exista.

61
Tehnologii WEB

Nici una din cele doua functii nu necesita argumente.

Functia mysql_errno() returneaza un cod numeric de eroare, n timp ce functia mysql_error() returneaza un sir care descrie eroarea. Daca nu s-a produs nici o eroare, codul numeric al erorii este zero si descrierea are ca valoare un sir vid. Informatiile de eroare sunt disponibile numai daca este activa o conexiune cu serverul MySQL. Prin urmare, intai trebue sa se reuseasca conectarea la MySQL.

62
Tehnologii WEB

Exemplu de folosire a functiilor respective pentru a verifica modul de operare a functiei mysql_select_db() (selecteaza baza de date):

63

<?php $dbh = mysql_connect( "localhost", "Costica", "mypass") or die("Unable to connect to MySQL"); print "Connected to MySQL<br />"; mysql_select_db("lucrudb"); if (mysql_error()) { die("<br />". mysql_errno(). " : ". mysql_error()); }
Tehnologii WEB

Daca se reuseste conexiunea la serverul MySQL si baza de date cu numele "lucrudb" este inexistenta, rezultatul afisat de exemplul de mai sus va fi urmatorul:

Connected to MySQL 1049 : Unknown database 'lucrudb'

64
Tehnologii WEB

curs 10

2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

65
Tehnologii WEB

2.4. Crearea si selectarea unei baze de date

O functie importanta in lucrul cu bazele de date este mysql_query(), care are urmatoarea forma: mysql_query(interogare)

Unde "interogare" este un sir care contine comenzile SQL care urmeaza a fi executate (interogarea nu trebuie sa se ncheie cu un caracter punct si virgula). Functia returneaza TRUE daca serverul a reusit sa execute interogarea; n caz contrar, returneaza FALSE.

66
Tehnologii WEB

Pentru

a crea o noua baza de date folosim comanda SQL: CREATE DATABASE numeBazaDeDate;

care o putem lansa de la o consola MySQL, sau o putem apela de la un script PHP prin intermediul functiei mysql_query().

67
Tehnologii WEB

Exemplu prin care creem baza de date "lucrudb": <?php $dbh = mysql_connect( "localhost", "Costica", "mypass") or die("Unable to connect to MySQL"); $createdb = mysql_query('CREATE DATABASE lucrudb'); if ($createdb) echo "Baza de date lucrudb a fost creata <br />"; else echo "<br />". mysql_errno(). " : ". mysql_error(); mysql_close(); ?>
68
Tehnologii WEB

Dupa executarea acestui script, daca totul este corect, va fi creata baza de date "lucrudb" si va fi afisat mesajul "Baza de date lucrudb a fost creata". Dupa ce programul a obtinut o conexiune cu serverul MySQL, programul poate selecta baza de date la care va avea acces. Pentru aceasta, folositi functia mysql_select_db(), care are urmatoarea forma: mysql_select_db(baza_de_date) Unde "baza_de_date" este numele bazei de date la care urmeaza a se obtine acces. Functia returneaza TRUE daca poate obtine accesul la baza de date, respectiv FALSE n caz contrar.

69
Tehnologii WEB

Exemplu de selectare a bazei de date "lucrudb": <?php $dbh = mysql_connect( "localhost", "Costica", "mypass") or die("Unable to connect to MySQL"); $selectdb = mysql_select_db('lucrudb'); if ($selectdb) echo "Baza de date lucrudb a fost selectata <br />"; else echo "<br />". mysql_errno(). " : ". mysql_error(); mysql_close(); ?>

70
Tehnologii WEB

curs 10

2. Utilizarea bazelor de date folosind PHP 2.1. Conectarea la serverul MySQL 2.2. Incheierea conexiunii la serverul MySQL 2.3. Detectarea aparitiei erorilor 2.4. Crearea si selectarea unei baze de date 2.5. Crearea tabelelor

71
Tehnologii WEB

2.5. Crearea tabelelor

Dupa

conectarea si selectarea bazei de date putem crea tabele in cadrul bazei de date selectate. Pentru aceasta folosim limbajul SQL CREATE TABLE numeTabel (coloana1, coloana2, ...);

impreuna cu functia mysql_query().


72
Tehnologii WEB

In exemplul urmator cream tabelul cu numele "carti" care contine urmatoarele campuri:
Nume camp id nume autor Tip Identificator unic, nenull, cheie primara Char(30) Char(25)

gen
data_intrare

Char(10)
Date

pret

Decimal(12,2)

73
Tehnologii WEB

Scriptul PHP pentru crearea tabelului:

<?php $dbh = mysql_connect("localhost", "Costica", "mypass") or die("Unable to connect to MySQL"); $selectdb = mysql_select_db('lucrudb'); if (!$selectdb) echo "Baza de date lucrudb nu a putut fi selectata deoarece : ". mysql_errno(). " : ". mysql_error();

74
Tehnologii WEB

75

$sql = "CREATE TABLE carti (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nume varchar(30) NOT NULL, autor varchar(25) , gen varchar(10) NOT NULL, data_intrare date, pret decimal(12,2))"; $ctabel = mysql_query($sql); if ($ctabel) echo "Tabelul carti a fost creat <br />"; else echo "Tabelul carti nu a putut fi creat deoarece : ". mysql_errno(). " : ". mysql_error(); mysql_close(); ?>
Tehnologii WEB

Instructiunea

mysql_query($sql), executa aceasta comanda si in cazul in care rezultatul este TRUE se trimite la iesire sirul: "Tabelul carti a fost creat". cazul in care instructiunea SQL nu a putut fi executata, functia mysql_query($sql) intoarce valoarea FALSE, afisand eroarea din cauza careia tabelul nu a putut fi creat.

In

76
Tehnologii WEB

ntrebri?

77