Sunteți pe pagina 1din 68

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

Tehnologii Web

Lector univ. dr. Adrian Runceanu

Curs 11

MySQL (partea II)

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
3
Tehnologii WEB

1. Verificarea interogarilor care nu returneaza rnduri de tabel


Din punctul de vedere al limbajului PHP, exista doua categorii de interogari SQL, ambele fiind emise folosind functia mysql_query():
1.

2.

Interogarile SELECT, care returneaza rnduri ale unui tabel Interogarile UPDATE, INSERT si DELETE, care nu returneaza rnduri ale unui tabel

4
Tehnologii WEB

Pentru a verifica daca o interogare UPDATE, INSERT sau DELETE a avut efectul dorit, se poate folosi functia mysql_affected_rows(), care returneaza numarul rndurilor afectate de interogarea cea mai recenta.

O alta functie utila este mysql_insert_id().


Cand se introduce un rand intr-un tabel a carui cheie primara este de tipul AUTO_INCREMENT, functia mysql_insert_id() determina valoarea cheii primare atribuite de MySQL.

5
Tehnologii WEB

Functia returneaza valoarea zero daca interogarea precedenta nu a generat o valoare AUTO_INCREMENT. Ca atare, functia trebuie apelata la putin timp dupa interogarea care a inserat rndul in tabel, astfel nct o interogare ulterioara sa nu modifice rezultatul.

Exemplu de utilizare a functiilor mysql_affected_rows() si mysql_insert_id() impreuna cu interogarea INSERT (care adauga randuri in tabel).
Folosim baza de date "lucrudb" si tabelul "carti", create in cursul anterior

6
Tehnologii WEB

<?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(); $sql = "INSERT INTO carti (nume, autor, gen, data_intrare, pret) VALUE ('Carte1', 'Autor1', 'Educativ', '2008-9-16', 11.00)"; $insert = mysql_query($sql);

7
Tehnologii WEB

if ($insert) echo "Datele au fost adaugate in tabelul carti <br />"; else echo "Datele nu au fost adaugate in tabelul carti deoarece : ". mysql_errno(). " : ".mysql_error(); $nranduri = mysql_affected_rows(); $id = mysql_insert_id(); if ($nranduri == -1) { echo "INSERT nu a putut sa adauge datele"; } else echo "Au fost adaugate $nranduri randuri, cheia primara = $id"; mysql_close(); ?>

8
Tehnologii WEB

Dupa ce s-a facut conectarea la serverul MySQL si s-a reusit selectarea bazei de date, variabila "$sql" contine comanda SQL pentru introducerea unui nou rand in tabelul "carti", variabila "$insert", prin intermediul functiei mysql_query($sql) introduce datele in baza de date, variabila "$nranduri" preia de la functia mysql_affected_rows() numarul de randuri afectate (aici introduse) iar variabila "$id" va avea valoarea cheii primare atribuite de MySQL.

Daca nu apare nici o eroare, rezultatul afisat de acest script este urmatorul: Datele au fost adaugate in tabelul carti Au fost adaugate 1 randuri, cheia primara = 1

9
Tehnologii WEB

Functia mysql_affected_rows() numara numai rndurile efectiv modificate de catre o interogare UPDATE. Rndurile n cazul carora vechea si noua valoare din coloana sunt identice nu se numara printre rndurile afectate.

De asemenea, o interogare DELETE care nu contine o clauza WHERE va determina functia mysql_affected_rows() sa returneze valoarea zero, indiferent de numarul rndurilor sterse din tabel. O modalitate simpla, de a determina daca stergerea tuturor rndurilor unui tabel a reusit consta n a emite o interogare care returneaza numarul rndurilor existente n tabel.

10
Tehnologii WEB

De exemplu:

<?php $sql = "SELECT COUNT(id) FROM carti"; $nr = mysql_query($sql); echo $nr; ?>
Daca interogarea returneaza valoarea zero, demonstreaza stergerea tuturor rndurilor din tabel.

11
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
12
Tehnologii WEB

2. Prelucrarea rezultatelor interogarilor SELECT


Interogarile SELECT returneaza ca rezultate rnduri de tabel. Rndurile unui tabel sunt incluse ntr-o structura de date numita "set de rezultate".

Prelucrarea setului de rezultate returnat de o interogare SELECT implica parcurgerea rndurilor setului de rezultate. O modalitate de parcurgere a rndurilor unui set de rezultate este prin utilizarea unei instructiuni "for".

13
Tehnologii WEB

1. nti se obtine numarul de randuri folosind functia mysql_num_rows(), transfernd ca argument valoarea returnata de functia mysql_query(). 2. Se scrie o instructiune "for" care parcurge fiecare rand folosind ca limita numarul de rnduri obtinut anterior, 3. Apoi, in interiorul instructiunii "for" se foloseste functia mysql_fetch_row() care returneaza o valoare ce reprezinta un tablou alcatuit din toate coloanele rndului curent (tabloul foloseste indexuri intregi, unde valoarea primului index este egala cu zero). 4. Pentru a prelucra coloanele stocate n tablou, se foloseste o instructiune "foreach", care elimina necesitatea existentei unui index explicit al buclei.
14
Tehnologii WEB

Exemplu care afiseaza valoarea din fiecare coloana a tabelului: <?php $interogare = "SELECT * FROM carti"; $rezultat = mysql_query($interogare); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $nr = mysql_num_rows($rezultat);
// Functia mysql_fetch_row() se poate folosi pentru a obtine urmatorul rnd din setul de rezultate, astfel:

for ($i = 0; $i < $nr; $i++) { $rand = mysql_fetch_row($rezultat); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } foreach ($rand as $coloana) { echo "<br /> $coloana"; } } 15 ?>
Tehnologii WEB

Functia mysql_fetch_row() returneaza true daca un set de rezultate contine rnduri neprelucrate, respectiv false n caz contrar.
De aceea, n general este mai convenabil sa se evite aceasta metoda de folosire a instructiunii "for" impreuna cu functia mysql_num_rows() pentru a parcurge tabelul, in schimb, o alta metoda recomandata pentru parcurgerea fiecarei linii din tabel este folosirea unei instructiuni "while".

16
Tehnologii WEB

Exemplul de mai jos, care de data aceasta, in locul instructiunii "for" foloseste o instructiune "while":

<?php $interogare = "SELECT * FROM carti"; $rezultat = mysql_query($interogare); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } while ($rand = mysql_fetch_row($rezultat)) { if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } foreach ($rand as $coloana) { echo "| $coloana |"; } echo "<br />"; } ?>
17
Tehnologii WEB

Daca in tabelul "carti" avem trei randuri, exemplul de mai sus v-a afisa urmatorul rezultat:
| 1 || Carte1 || Autor1 || Educativ || 2008-09-15 || 11.00 | | 2 || Carte2 || Autor2 || Aventura || 2008-09-15 || 11.50 | | 3 || Carte3 || Autor3 || Romantic || 2008-09-16 || 12.00 |

Daca doriti sa obtineti acces la valoarea unei anumite coloane, puteti face referire la elementul din tablou folosind o cheie a tabloului. De exemplu, daca rezultatul functiei mysql_fetch_row() este stocat n variabila "$rand", puteti obtine acces la prima coloana folosind sintaxa "$rand[0]", la a doua coloana folosind sintaxa "$rand[1]" etc.

18
Tehnologii WEB

Daca vi se pare incomod sa lucrati astfel cu indici numerici, puteti obtine rndurile tabelului folosind functia mysql_fetch_array(), care returneaza un tablou asociativ.
Valorile cheilor din tablou le reprezinta numele coloanelor din setul de rezultate. Ca si functia mysql_fetch_row(), functia mysql_fetch_array() returneaza false daca nu mai exista rnduri n setul de rezultate.

19
Tehnologii WEB

Un exemplu de utilizare a functiei mysql_fetch_array():

<?php $interogare = "SELECT * FROM carti"; $rezultat = mysql_query($interogare); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } while ($rand = mysql_fetch_array($rezultat, MYSQL_ASSOC)) { if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } foreach ($rand as $nume => $coloana) { echo "| $nume => $coloana |"; } echo "<br />"; } ?>
20
Tehnologii WEB

La executie, exemplul anterior afiseaza numele si valoarea fiecarei coloane rezultate, astfel: | id => 1 || nume => Carte1 || autor => Autor1 || gen => Educativ || data_intrare => 2008-09-15 || pret => 11.00 | | id => 2 || nume => Carte2 || autor => Autor2 || gen => Aventura || data_intrare => 2008-09-15 || pret => 11.50 | | id => 3 || nume => Carte3 || autor => Autor3 || gen => Romantic || data_intrare => 2008-09-16 || pret => 12.00 |

21
Tehnologii WEB

Daca doriti sa obtineri accesul la valoarea unei anumite coloane, folositi cheia cu numele coloanei. De exemplu:

echo "<br /> $rand[autor]";

22
Tehnologii WEB

Cel de-al doilea argument al functiei mysql_fetch_array() este optional. Totusi, daca nu specificati MYSQL_ASSOC ca valoare a argumentului, PHP returneaza un tablou in care valoarea cheilor vor fi numerele si numele coloanelor.

Functia mysql_insert_id(), prezentata mai la inceputul cursului, poate returna un rezultat incorect pentru coloanele MySQL de tipul BIGINT [BIGINT este un tip de valoare care suporta numere cu 20 de cifre, folosit pentru campurile integer (spre deosebire de MEDIUMINT care suporta numere de la 0 la 16.777.215 (3 bytes)) sau INT care suporta numerele de la 0 la 4.294.967.295 (4 bytes)].

23
Tehnologii WEB

Dupa efectuarea unei interogari INSERT, in locul functiei mysql_insert_id() se poate folosi functia LAST_INSERT_ID(), aceasta returneaza valoarea atribuita de MySQL unei coloane AUTO_INCREMENT, indiferent de tipul coloanei. Mai mult, apelurile ulterioare in script la functii MySQL nu afecteaza rezultatul returnat de LAST_INSERT_ID(), care este afectat numai de operatiile INSERT n care sunt implicate coloane AUTO_INCREMENT.

24
Tehnologii WEB

Exemplu care prezinta modul de obtinere a valorii LAST INSERT ID():

<?php $sql = "INSERT INTO carti (nume, autor, gen, data_intrare, pret) VALUE ('Carte3', 'Autor3', 'Gen3', '2008-9-16', 8.30)"; $insert = mysql_query($sql); if (!$insert) { echo "<br /> Comanda INSERT a esuat: ". mysql_errno(). " : ". mysql_error(). "<br />"; }

25
Tehnologii WEB

26

$interogare = "SELECT LAST_INSERT_ID() FROM carti"; $rezultat = mysql_query($interogare); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $rand = mysql_fetch_row($rezultat); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } echo "<br /> Ultimul ID repartizat: $rand[0]"; mysql_close(); ?>
Tehnologii WEB

Dupa executarea acestui script, daca nu apare vreo eroare, rezultatul afisat va fi de genul:

Ultimul ID repartizat: 3

Functia last_insert_id() returneaza rezultatul corect numai dupa ce a fost efectuata o comanda INSERT

27
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
28
Tehnologii WEB

3. Obtinerea numarului coloanelor dintr-un tabel MySQL

Pentru a obtine numarul coloanelor dintr-un set de rezultate, utilizati functia mysql_num_fields()

Aceasta foloseste ca argument valoarea returnata de functia mysql_query(). Exemplu in care functia mysql_num_fields() determina numarul coloanelor dintr-un set de rezultate care contin rndurile selectate folosind specificatorul SQL pentru cmpuri "*":

29
Tehnologii WEB

<?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $nr_campuri = mysql_num_fields($rezultat); echo "<br /> Numar campuri: $nr_campuri"; mysql_close(); ?>
30
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
31
Tehnologii WEB

4. Obtinerea numelui unei coloane


Pentru a obtine numele unei coloane dintr-un tabel MySQL, folositi functia mysql_field_name() Aceasta returneaza numele coloanei din setul de rezultate. Functia preia doua argumente:

valoarea returnata de functia mysql_query() indexul coloanei care va fi descrisa

Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este 1, etc.

32
Tehnologii WEB

Exemplu care determina numele primei coloane dintrun tabel MySQL: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $nume = mysql_field_name($rezultat, 0); echo "<br /> Coloana 1 : $nume"; mysql_close(); ?>
33
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
34
Tehnologii WEB

5. Obtinerea lungimii unei coloane


Pentru

a obtine lungimea unei coloane dintr-un tabel MySQL, folositi functia mysql_field_len() Aceasta returneaza lungimea maxima a coloanei din setul de rezultate. Functia preia doua argumente:
valoarea returnata de functia mysql_query() si indexul coloanei care va fi descrisa

Indexul

asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este 1, etc.
Tehnologii WEB

35

Exemplu care determina lungimea maxima a coloanei doi dintr-un tabel MySQL: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $lungime = mysql_field_len($rezultat, 1); echo "<br /> Lungime Coloana 2 : $lungime"; mysql_close(); ?>
36
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
37
Tehnologii WEB

6. Obtinerea indicatorilor MySQL asociati unei coloane

Pentru a obtine indicatorii SQL asociati unei coloane dintr-un tabel MySQL, folositi functia mysql_field_flags()

Aceasta preia doua argumente:


valoarea returnata de functia mysql_query() si indexul coloanei care va fi descrisa

Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este 1, etc.

38
Tehnologii WEB

Functia mysql_field_flags() raporteaza urmatorii indicatori: AUTO_INCREMENT BINARY BLOB ENUM MULTIPLE_KEY NOT_NULL PRIMARY_KEY TIMESTAMP UNIQUE_KEY UNSIGNED ZEROFILL Daca la o coloana sunt asociati mai multi indicatori, fiecare indicator este separat de vecinii sai prin intermediul unui singur spatiu.

39
Tehnologii WEB

Exemplu care determina indicatorii asociati primei coloane dintr-un tabel MySQL: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $indicatori = mysql_field_flags($rezultat, 0); echo "<br /> Indicatorii Coloanei 1 : $indicatori"; mysql_close(); ?>
40
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
41
Tehnologii WEB

7. Obtinerea tipului MySQL al unei coloane


Pentru a obtine tipul MySQL al unei coloane dintr-un tabel MySQL, folositi functia mysql_field_type() Aceasta preia doua argumente:

valoarea returnata de functia mysql_query() si indexul coloanei care va fi descrisa

Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este 1, etc. Principalele tipuri MySQL returnate de functia mysql_field_type() sunt prezentate in cursul anterior, in tabelul "Principalele tipuri de date din MySQL".

42
Tehnologii WEB

Exemplu care determina tipul primei coloane dintr-un tabel MySQL: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $tip = mysql_field_type($rezultat, 0); echo "<br /> Tip Coloana 1 : $tip"; mysql_close(); ?>
43
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
44
Tehnologii WEB

8. Determinarea tabelului MySQL asociat unei coloane


Pentru a determina tabelul MySQL (daca exista) asociat unei anumite coloane, folositi functia mysql_field_table() Aceasta preia doua argumente: valoarea returnata de functia mysql_query() si indexul coloanei care va fi descrisa Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este 1, etc. n cazul n care coloana contine o valoare calculata sau daca respectiva coloana nu este asociata n alt mod cu un tabel MySQL, functia returneaza un sir vid.

45
Tehnologii WEB

Exemplu care determina tabelul asociat primei coloane din setul de rezutate: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $tabel = mysql_field_table($rezultat, 0); echo "<br /> Nume tabel : $tabel"; mysql_close(); ?>
46
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
47
Tehnologii WEB

9. Obtinerea structurii complete a setului de rezultate

Daca doriti obtinerea mai multor caracteristici ale setului de rezultate, o functie utila poate fi: mysql_fetch_field() Aceasta functie returneaza un obiect ale carui proprietati contin o varietate de informatii cu privire la coloana unui tabel MySQL. Proprietatile sunt urmatoarele: blob - are valoarea 1 n cazul n care coloana este de tip BLOB max_length - lungimea maxima a coloanei; multiple_key - are valoarea 1 n cazul n care coloana este o cheie non-unica name - numele coloanei not_null - are valoarea 1 n cazul n care coloana nu poate contine valoarea NULL
Tehnologii WEB

48

numeric - are valoarea 1 n cazul n care coloana este numerica primary_key - are valoarea 1 n cazul n care coloana este o cheie primara table - numele tabelului MySQL caruia i apartine coloana type - tipul MySQL al coloanei unique_key - are valoarea 1 n cazul n care coloana este o cheie unica unsigned - are valoarea 1 n cazul n care coloana este de tip UNSIGNED zerofill - are valoarea 1 n cazul n care coloana este completata cu zerouri functia mysql_fetch_field() preia doua argumente: valoarea returnata de functia mysql_query() si indexul coloanei care va fi descrisa. Indexul asociat primei coloane este 0, indexul asociat celei de-a doua coloane este 1, etc.
49
Tehnologii WEB

Exemplu care prezinta modul de obtinere si descriere a structurii complete a setului de rezultate pentru prima coloana dintr-un tabel MySQL: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $info = mysql_fetch_field($rezultat, 0); echo "<br /> Coloana 1: "; echo "<PRE> blob: $info->blob max_length: $info->max_length multiple_key: $info->multiple_key name: $info->name
50
Tehnologii WEB

not_null: $info->not_null numeric: $info->numeric primary_key: $info->primary_key table: $info->table type: $info->type unique_key: $info->unique_key unsigned: $info->unsigned zerofill: $info->zerofill </PRE>"; mysql_close(); ?>

51
Tehnologii WEB

Pentru a obtine aceste proprietati pentru toate coloanele din tabel, folositi o instructiune "for", dupa exemplul de mai jos, care parcurge fiecare coloana, folosind ca limita a numarului de coloane valoarea returnata de functia mysql_num_fields() <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; }
52
Tehnologii WEB

$nr_campuri = mysql_num_fields($rezultat); for ($i=0; $i< $nr_campuri; $i++) { echo "<br /> Coloana $i: "; $info = mysql_fetch_field($rezultat); if ($info) { echo "<PRE> blob: $info->blob max_length: $info>max_length multiple_key: $info>multiple_key name: $info->name not_null: $info->not_null
53

numeric: $info->numeric primary_key: $info-> primary_key table: $info->table type: $info->type unique_key: $info->unique_key unsigned: $info->unsigned zerofill: $info->zerofill </PRE>"; } else { echo "Necunoscut"; } } mysql_close(); ?>
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
54
Tehnologii WEB

10. Accesul non-secvential la coloanele unui set de rezultate


Functiile

mysql_fetch_row() si mysql_fetch_array() returneaza, n general, rndurile dintr-un set de rezultate n mod secvential, incepand de la primul rand al tabelului.

Totusi,

functia mysql_data_seek() permite obtinerea accesului la rndurile unui set de rezultate ntr-o maniera non-secventiala.
Tehnologii WEB

55

10. Accesul non-secvential la coloanele unui set de rezultate


Functia

are forma: mysql_data_seek(rezultat, numar_rand) Unde "rezultat" este valoarea returnata de functia mysql_query(), iar "numar_rand" este indexul rndului la care doriti sa obtineti accesul.
Primul rnd al tabelului este numerotat cu 1, al doilea cu 2, etc. Functia returneaza true daca executia reuseste, respectiv false n caz contrar. Apoi, o invocare ulterioara a functiei mysql_fetch_row() sau a functiei mysql_fetch_array() va returna rndul din 56 pozitia specificata in functia mysql_data_seek().

Tehnologii WEB

Exemplul urmator obtine accesul la al treilea rnd al setului de rezultate returnat de o interogare anterioara: <?php $sql = "SELECT * FROM nume_tabel"; $rezultat = mysql_query($sql); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $ok = mysql_data_seek($rezultat, 3); if (!$ok) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } $rand = mysql_fetch_array($rezultat, MYSQL_ASSOC); foreach ($rand as $coloana) { echo "| $coloana |"; } mysql_close(); 57 ?>

Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
58
Tehnologii WEB

11. Determinarea bazelor de date gazduite de un server MySQL

59

Pentru a determina bazele de date gazduite de un server MySQL la care aveti acces, utilizati functia: mysql_list_dbs() Functia returneaza un set de rezultate alcatuit din numele bazelor de date gazduite. Puteti determina numarul rndurilor din setul de rezultate utilizand functia mysql_num_rows(), asa cum procedati n cazul unui set de rezultate normal. Cu toate acestea, trebuie sa preluati rndurile folosind functia mysql_tablename(), care preia ca argumente valoarea returnata de functia mysql_list_dbs() si numarul rndurilor care vor fi preluate. Rndurile sunt numerotate ncepnd de la 0.
Tehnologii WEB

Exemplu care prezinta modul de afisare a numelor bazelor de date gazduite: <?php $dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL"); $dblist = mysql_list_dbs(); $nr = mysql_num_rows($dblist); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_tablename($dblist, $i); } mysql_close(); ?>
60
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
61
Tehnologii WEB

12. Determinarea tabelelor incluse ntro baza de date MySQL

Pentru a obtine o lista a tabelelor incluse ntr-o baza de date specificata, folositi functia mysql_list_tables()

Aceasta foloseste ca argument numele bazei de date si returneaza un set de rezultate similar celui returnat de mysql_list_dbs(). Pentru a obtine acces la lista cu tabele, parcurgeti setul de rezultate cu ajutorul unei instructiuni "for" in cadrul careia utilizati functia mysql_tablename().

62
Tehnologii WEB

Exemplu care prezinta modul de obtinere si afisare a listei tabelelor din baza de date "lucrudb": <?php $dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL"); $tabele = mysql_list_tables("lucrudb"); $nr = mysql_num_rows($tabele); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_tablename($tabele, $i); } mysql_close(); ?>
63
Tehnologii WEB

curs 11
1. Verificarea interogarilor care nu returneaza rnduri de tabel 2. Prelucrarea rezultatelor interogarilor SELECT 3. Obtinerea numarului coloanelor dintr-un tabel MySQL 4. Obtinerea numelui unei coloane 5. Obtinerea lungimii unei coloane 6. Obtinerea indicatorilor MySQL asociati unei coloane 7. Obtinerea tipului MySQL al unei coloane 8. Determinarea tabelului MySQL asociat unei coloane 9. Obtinerea structurii complete a setului de rezultate 10. Accesul non-secvential la coloanele unui set de rezultate 11. Determinarea bazelor de date gazduite de un server MySQL 12. Determinarea tabelelor incluse ntr-o baza de date MySQL 13. Determinarea coloanelor incluse ntr-un tabel
64
Tehnologii WEB

13. Determinarea coloanelor incluse ntr-un tabel

Pentru a obtine o lista a coloanelor incluse ntr-un tabel, utilizati functia: mysql_list_fields()

Aceasta returneaza un set de rezultate alcatuit din numele coloanelor tabelului specificat, foloseste ca argumente numele bazei de date si numele tabelului. Exemplul urmator prezinta modul de obtinere a numelui coloanelor din tabelul "carti", folosind functia mysql_list_fields():

65
Tehnologii WEB

<?php $dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL"); $coloane = mysql_list_fields("lucrudb", "carti"); $nr = mysql_num_fields($coloane); if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />"; } for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_field_name($coloane, $i); } mysql_close(); ?>
66
Tehnologii WEB

Daca

in locul numelui coloanelor doriti sa obtineti alte informatii despre coloanele dintrun tabel MySQL, folositi in locul functiei mysql_field_name() din interiorul instructiunii "for", una din functiile:
1. 2. 3. 4.

mysql_fetch_fields() mysql_field_flags() mysql_field_len() mysql_field_type()

67
Tehnologii WEB

ntrebri?

68
Tehnologii WEB