online: 4; azi: 847; total: 52853 Webdesign - Phpmysql - 68

Lucrul cu baze de date MySQL, seturi de rezultate

  • Invatati sa obtineti date privind: numarul coloanelor, numele si lungimea coloanelor dintr-un tabel MySQL
  • Invatati sa obtineti informatii privind indicatorii MySQL asociati coloanelor si tipul fiecarei coloane
  • Invatati sa aflati numele tabelului care contine o anumita coloana si sa parcurgeti non-secvential randurile unui tabel MySQL

Biblioteca de functii MySQL a limbajului PHP include functii care va permit sa obtineti informatii despre un set de rezultate, inclusiv:

  • Numarul coloanelor din setul de rezultate
  • Numele fiecarei coloane
  • Lungimea fiecarei coloane
  • Indicatorii MySQL asociati coloanei
  • Tipul MySQL al fiecarei coloane
  • Numele tabelului MySQL care contine coloana

1. 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().
Iata un exemplu in care functia mysql_num_fields() determina numarul coloanelor dintr-o interogare care selecteaza toate coloanele folosind specificatorul SQL pentru toate câmpurile "*", astfel puteti afla numarul de coloane dintr-un tabel:
<?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();
?>

2. 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() si indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.
Iata un exemplu care determina numele 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 />";
}
$nume = mysql_field_name($rezultat, 0);
echo "<br /> Coloana 1 : $nume";
mysql_close();
?>

3. 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 l etc.
Iata un 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();
?>

4. 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 l etc.
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.
Iata un 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();
?>

5. 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 l etc.
Principalele tipuri MySQL returnate de functia mysql_field_type() sunt prezentate in Baze de date SQL, in tabelul "Principalele tipuri de date din MySQL".
Iata un 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();
?>

6. 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 l 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.
Iata un 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();
?>

7. 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
  • 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 l etc.
Iata un 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
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();
?>
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 />";
}
$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
        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();
?>

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

Functiile mysql_fetch_row() si mysql_fetch_array() returneaza, în general, rândurile dintr-un set de rezultate în mod secvential, incepand de la primul rand al tabelului. Totusi, functia mysql_data_seek() permite obtinerea accesului la rândurile unui set de rezultate într-o maniera non-secventiala, . Functia are forma:

  • mysql_data_seek(rezultat, numar_rand)
Unde "rezultat" este valoarea returnata de functia mysql_query(), iar "numar_rand" este indexul rândului la care doriti sa obtineti accesul. Primul rând al tabelului este numerotat cu 0, al doilea cu 1 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 rândul din pozitia specificata in functia mysql_data_seek().
Studiati urmatorul exemplu, care obtine accesul la al treilea rând 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 />";
}
if (!mysql_data_seek($rezultat, 2)) {
    echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";
}
else {
    $rand = mysql_fetch_array($rezultat, MYSQL_ASSOC);
    foreach ($rand as $coloana) {
        echo "| $coloana |";
    }
}
mysql_close();
?>
- Acest exemplu afiseaza datele din randul trei pentru fiecare coloana a tabelului MySQL.