Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Utilizarea functionalitatilor avansate ale limbajului PHP
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

<titlu> z8o24ol
Utilizarea functionalitatilor avansate ale limbajului PHP</titlu>
<titlu>Modulul 14:Accesul la bazele de date relationale</titlu>
<titlu>Scopuri</titlu>
• invatati sa va conectati la un server de baze de date MySQL
• invatati sa executati interogari SQL asupra unei baze de date MySQL
• invatati sa detectati si sa raportati erori in baza de date
• invatati sa obtineti informatii privind rezultatele interogarilor SQL
• invatati sa obtineti informatii despre structura unei baze de date MySQL
• invatati sa va protejati aplicatiile impotriva anumitor categorii de date rau intentionate introduse de utilizator
• intelegeti caracteristicile inexistente in MySQL furnizate de instrumente de gestiune a datelor, precum Postgresql, ODBC, LDAP si XML

Datele sunt obiectul celor mai multe operatii de prelucrare, iar sistemele de gestiune a bazelor de date furnizeaza cele mai complexe si mai puternice facilitati pentru lucrul cu datele. Ca atare, un programator PHP trebuie sa dispuna de cunostinte

aprofundate privind sistemele de gestiune a bazelor de date. Acest modul explica modul de redactare a programelor PHP care folosesc MySQL, sistemul de gestiune a bazelor de date cel mai frecvent folosit de catre programatorii PHP. De asemenea, sunt descrise si alte instrumente de gestiune a datelor, inclusiv Postgresql, ODBC, LDAP si XML.

<titlu>Utilizarea bazelor de date MySQL</titlu>
PHP include o biblioteca de functii care furnizeaza o interfata cu sistemul MySQL de gestiune de bazelor de date. Folosind aceste functii, un program PHP poate obtine accesul la datele rezidente intr-o baza de date MySQL si le poate modifica.
Majoritatea interactiunilor cu o baza de date se desfasoara dupa un model secvential simplu:
1. Se deschide o conexiune cu serverul MySQL.
2. Se specifica baza de date la care se va obtine accesul.
3. Se emit interogari SQL, se obtine accesul la rezultatele interogarilor si se executa operatii non-SQL.
4. Se inchide conexiunea cu serverul MySQL.




Aceasta sectiune descrie deschiderea unei conexiuni cu o baza de date, specificarea bazei de date la care urmeaza a se obtine accesul si inchiderea conexiunii cu serverul MySQL. De asemenea, se explica modul de detectare a erorilor in procesul de prelucrare a interogarilor MySQL si modalitatile de raspuns in cazul aparitiei acestora. In sectiunile urmatoare, se explica modul de emitere a interogarilor SQL, de acces la rezultatele interogarilor si de executie a operatiilor non-SQL.
<titlu>Conectarea la serverul MySQL</titlu>
Pentru a va conecta la un server MySQL, invocati functia mysql_connect(), a carei sintaxa este urmatoarea:

mysql_connect(nume_gazda, nume_utilizator, parola)

unde nume_gazda este numele gazdei pe care ruleaza serviciul MySQL, nume_utilizator este identificatorul de utilizator MySQL care va fi folosit, iar parola este parola MySQL asociata identificatorului de utilizator. Functia returneaza false in caz de esec; in caz contrar, returneaza o valoare - denumita identificator de legatura - care serveste ca instrument de manipulare pentru accesul la serverul MySQL. Iata un model de invocare a functiei mysql_connect():

$db = mysql_connect( „localhost”,”php”,”salut”); if (!$db) die („Nu s-a reusit deschiderea bazei de date.”);

Exemplul anterior testeaza valoarea rezultatului returnat de functia mysql_connect() si incheie executia programului daca PHP nu a reusit sa deschida conexiunea specificata. Argumentele prezentate in exemplu sunt adecvate pentru conectarea la un server MySQL care ruleaza pe aceeasi gazda ca si serverul PHP, adica gazda locala. Identificatorul de utilizator si parola sunt similare celor specificate in proiec¬tul 13-1 din modulul anterior.
Puteti omite numele gazdei, identificatorul de utilizator si parola, sau toate cele trei argumente. Daca procedati astfel, vor fi luate in considerare in mod prestabilit urmatoarele valori:
• Numele gazdei: localhost
• Identificatorul de utilizator: identificatorul de utilizator al procesului server MySQL
• Parola: o parola vida
De exemplu, instructiunea urmatoare incearca sa stabileasca o conexiune cu serviciul MySQL care ruleaza pe gazda db.osborne.com, folosind un identificator de utilizator si o parola prestabilite:

$db = mysql_connect(„db.osborne.com”);

<Sugestie>
In mod prestabilit, functia mysql_connect() incearca sa contacteze serviciul MySQL prin intermediul portului 3306, 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:3305".</Sugestie>

<titlu>Selectarea bazei de date</titlu>
Dupa ce programul dumneavoastra a obtinut o conexiune cu serverul MySQL, programul poate specifica baza de date la care va avea acces. Pentru aceasta, invoca functia mysql_select_db(), care are urmatoarea forma:

mysql_select_db(baza_de_date)

unde baza_de_date este un sir care contine numele bazei de date la care urmeaza a se obtine acces. Functia returneaza true daca poate obtine accesul la baza de date, respectiv false in caz contrar.
Puteti testa rezultatul functiei mysql_select_db() folosind un program ca acesta:

$ok = mysql_select_db(„testdb”); if (!$ok)
A die (“Nu poate obtine acces la baza de date testdb.”)
S

Totusi, acest procedeu nu este foarte util pentru a determina cauza sau natura unei invocari ratate. O metoda mai buna consta in utilizarea functiilor din biblioteca MySQL de verificare a erorilor, functii descrise in sectiunea urmatoare, „Detectare aparitiei erorilor".

<titlu>Detectarea aparitiei erorilor</titlu>
Biblioteca MySQL din PHP furnizeaza doua functii de verificare a erorilor, si anume mysql_errno() si mysql_error(). Fiecare functie returneaza un rezultat care reflecta eroarea, daca exista, asociata celei mai recente operatii cu MySQL. Daca programul dumneavoastra executa o secventa de operatii MySQL, iar prima operatie genereaza o eroare, informatiile despre erorile respective sunt pierdute in momentul initierii celei de-a doua operarii.
Nici una din cele doua functii nu necesita argumente. Functia mysql_errno() returneaza un cod numeric de eroare, in timp ce functia mysql_error() returneaza o descriere textuala a erorii. Daca nu s-a produs nici o eroare, codul numeric al erorii este zero si descrierea textuala are ca valoare un sir vid.
Informatiile de eroare sunt disponibile numai daca este activa o conexiune cu serverul MySQL. Ca atare, nu puteti folosi nici una dintre aceste functii pentru a raporta erorile asociate functiei mysql_connect().
Iata cum puteti folosi functiile respective pentru a verifica modul de operare a functiei mysql_select_db ():

mysql_select_db(„testdb”); if (mysql_error())
A die(„<BR> . mysql_errno().”: „.mysql_error().”<BR>”;
S

De exemplu, daca incercati sa obtineti accesul la baza de date inexistenta testdbx, programul de mai sus va genera urmatorul rezultat:

1044: Access denied for user: ‚php@localhost’ to database ‚testdbx’
(Accesul interzis pentru utizatorul … la baza de date …)

<titlu>Eliminarea mesajelor de eroare si a avertismentelor nedorite</titlu>
Numeroase functii PHP pot produce erori sau mesaje de avertizare care ii pot deruta pe utilizatorii siturilor Web sau care le pot cauza neplaceri acestora. PHP furnizeaza functia error_reporting(), care va permite sa eliminari mesajele nedorite. Functia are urmatoarea forma:

error_reporting(masca)

unde masca specifica tipul mesajelor care vor fi raportate. Daca specificati zero ca valoare a atributului masca, nu va fi raportat nici un mesaj. Daca specificati E_ALL ca

valoare a atributului masca, vor fi raportate toate mesajele. De exemplu, pentru a elimina toate mesajele, invocati functia dupa cum urmeaza:

error_reporting(0);

In general, este util sa permiteti limbajului PHP sa afiseze mesaje de eroare si de avertisment in faza de dezvoltare a programelor, deoarece acestea va pot ajuta sa identificati si sa eliminati problemele. Ca atare, in general trebuie sa eliminati erorile si mesajele de avertisment numai pentru programele aflate in uz, nu si pentru cele aflate in faza de dezvoltare.

<titlu>Inchiderea conexiunii cu serverul MySQL </titlu>
Pentru a inchide o conexiune cu un server MySQL, invocati functia mysql_close(), care are urmatoarea forma:

mysql_close()

Functia returneaza true in caz de reusita; in caz contrar, returneaza false. In general, nu este necesara invocarea functiei mysql_close(), deoarece PHP inchide automat conexiunile deschise cu bazele de date atunci cand un script isi incheie executia.
Iata cum se poate folosi functia mysql_close() pentru a inchide o conexiune:

mysql_close() if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S

<Sfatul specialistului>
Intrebare: Daca PHP inchide in mod automat conexiunile deschise cu baza de date atunci cand un script isi incheie exe¬cutia, de ce este necesara invocarea functiei mysql_close()?
Raspuns: Prin inchiderea unui fisier, sunt eliberate resursele alocate, inchiderea unei conexiuni cu o baza de date elibereaza de asemenea resursele alocate. Daca inchideti o conexiune cu o baza de date inainte de sfarsitul progra¬mului dumneavoastra, resursele suplimentare se vor gasi la dispozitia altor pro¬cese. Ocazional, puteti scrie un program care obtine accesul la mai multe servere MySQL. Intr-o asemenea situatie, puteti pastra o singura conexiune deschisa la orice moment de timp dat; functia mysql_close() va permite sa inchideti o conexiune cu o baza de date anterior deschiderii unei alte conexiuni.
</Sfatul specialistului>

<Test „la minut">
• Care este functia utilizata pentru a deschide o conexiune cu o baza de date MySQL?
• Care este functia utilizata pentru a specifica baza de date MySQL la ca se va obtine accesul folosind o anumita conexiune cu o baza de date?
• Care este functia ce returneaza codul numeric de eroare asociat celei mai recente operatiuni MySQL? </Test „la minut">

<titlu>Executarea interogarilor UPDATE, INSERT si DELETE</titlu>
Din punctul de vedere al limbajului PHP, exista doua categorii de interogari SQL
• Interogarile SELECT, care returneaza randuri ale unui tabel
• Interogarile UPDATE, INSERT si DELETE, care nu returneaza randuri ale unui tabel
Ambele categorii de interogari sunt emise folosind functia mysql_query(), dar verificarea si prelucrarea celor doua categorii de rezultate ale interogarilor sunt procese destul de diferite. In sectiunea urmatoare este explicat modul de utilizare a functiei mysql_query(). De asemenea, este explicat modul de utilizare a interogarilor care nu returneaza randuri de tabel. Daca va intereseaza rezultatul invers, examinati o sectiune ulterioara din acest modul, intitulata „Prelucrarea rezultatelor intero¬garilor SELECT", in care se explica modul de prelucrare a rezultatelor interogarilor care returneaza randuri de tabel.

<titlu>Functia mysql_query()</titlu>
Functia mysql_query() executa o interogare specificata. Functia are urmatoarea forma:

mysql_query(interogare)

unde interogare este un sir care contine interogarea care urmeaza a fi executata (interogarea nu trebuie sa se incheie cu un caracter punct si virgula). Functia retur¬neaza true daca serverul a reusit sa execute interogarea; in caz contrar, returneaza false.
Iata o invocare caracteristica a functiei mysql_query(), care include un program ce verifica daca interogarea a reusit sau nu:

<nota>
Raspunsuri la test:
• mysql_connect()
• mysql_select_db()
• mysql_errno()</nota>

$interogare = „INSERT INTO angajat
(angajatnr, nume, ore, departament, salariu, data_angajare)
VALUE (4, James Madison, 40, ’Intretinere’, 20000, ’2005-10-01’)”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S

Interogarea este compatibila cu structura bazei de date folosita in proiectul 13-1, deci puteti rula atat aceasta interogare, cat si alte interogari similare, pentru a vedea cum functioneaza.
<titlu>Verificarea interogarilor care nu returneaza randuri de tabel</titlu>
Pentru a verifica daca o interogare UPDATE, INSERT sau DELETE a avut efectul dorit, puteti folosi functia mysql_affected_rows(), care returneaza numarul randurilor afectate de interogarea cea mai recenta. Functia are urmatoarea forma:

mysql_affected_rows()

In cazul in care cea mai recenta interogare UPDATE, INSERT sau DELETE a esuat, functia returneaza valoarea -1.
Iata cum puteti folosi functia mysql_affected_rows() pentru a determina modul de functionare a interogarii INSERT date anterior:

$interogare = „INSERT INTO angajat
(angajatnr, nume, ore, departament, salariu, data_angajare)
VALUE (4, James Madison, 40, ’Intretinere’, 20000, ’2005-10-01’)”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S if (mysql_affected_rows() != 1)
A die(„<BR>INSERT nu a reusit sa adauge angajatul.”);
S

<Sugestie>
Functia mysql_affected_rows() numara numai randurile efectiv modificate de catre o interogare UPDATE. Randurile in cazul carora vechea si noua valoare din coloana sunt identice nu se numara printre randurile 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 randurilor sterse din tabel. </Sugestie>

<titlu>Utilizarea coloanelor de tabel cu auto-incrementare</titlu>
Asa cum s-a aratat in modulul anterior, puteti folosi indicatorul AUTO_INCREMENT pentru a preciza faptul ca MySQL va repartiza o valoare secventiala unica in coloana care serveste drept cheie primara a tabelului. De exemplu, urmatoarele instructiuni SQL creeaza, un tabel cu acelasi tip de coloana:

CREATE TABLE master
( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, nume VARCHAR(50)
)
;

Cand inserati un rand intr-un tabel in acest mod, puteti folosi functia mysql_insert_id() pentru a determina valoarea cheii primare atribuite de MySQL. Functia are forma:

mysql_insert_id()

si 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 randul din tabel, astfel incat o interogare ulterioara sa nu modifice rezultatul.
Iata cum se poate insera un rand in tabelul master si cum se poate obtine valoarea cheii primare repartizate de MySQL:

$interogare = „INSERT INTO master (nume) VALUES(’G.W.Bush’)”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S echo „<BR>Randuri modificate: „ .mysql_affected_rows(); echo „<BR>ID inserat: „. mysql_insert_id();

<Sfatul specialistului>
Intrebare:Functia mysql_affected_rows() poate returna zero atunci cand sunt sterse toate randurile asociate unui tabel. Cum se poate afla daca o operatie de acest gen a reusit?
Raspuns: O modalitate simpla, dar fiabila, de a determina daca stergerea tuturor randurilor unui tabel a reusit consta in a emite o interogare care retur¬neaza numarul randurilor existente in tabel. De exemplu:

SELECT COUNT (angajatnr) FROM angajat;

Daca interogarea returneaza valoarea zero, acest fapt demonstreaza stergerea tuturor randurilor din tabel. </Sfatul specialistului>

<Atentie>
Functia mysql_insert_id() poate returna un rezultat incorect pentru coloanele de tipul MySQL BIGINT. Sectiunea "Sfatul specialistului" de la sfarsitul urmatoarei sectiuni,”Prelucrarea rezultatului interogarilor SELECT", descrie un procedeu de rezolvare a probei. </Atentie>

<Test „la minut">
• Care este functia PHP folosita pentru a emite o interogare

• Care este functia PHP ce returneaza numarul randurilor unui modificate de o interogare UPDATE, INSERT sau DELETE?
• Care este indicatorul MySQL ce arata ca este necesar ca valoarea unei chei primare sa fie atribuita de catre MySQL? </Test „la minut">

<titlu>Prelucrarea rezultatelor interogarilor SEECT</titlu>
Spre deosebire de interogarile UPDATE, INSERT si DELETE, interogarile SELEC returneaza randuri de tabel ca rezultate. Randurile unui tabel sunt incluse intr-o structura de date numita set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implica parcurgerea prin iteratie a randurilor setului de rezultate.
O modalitate de parcurgere iterativa a randurilor unui set de rezultate consta in obtinerea numarului de randuri, urmata de deplasarea prin iteratie, folosind numarul de randuri ca limita pentru o instructiune for. Pentru a obtine valoarea numarului de randuri, invocati functia mysql_num_rows(), transferand ca argument valona returnata de functia mysql_query(). De exemplu:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$numar = mysql_num_rows($rezultat);

Functia mysql_fetch_row() se poate folosi pentru a obtine urmatorul rand din secventa setului de rezultate, astfel:

for ($i = 0; $i < $numa; $i++)
A
$rand = mysql_fetch_row($rezultat) if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);

<nota>
Raspunsuri la test:
• mysql_query()
• mysql_affected_rows()
• AUTO_INCREMENT"</nota>

S
// aici se prelucreaza randul din setul de rezultate
S

Totusi, functia mysql_fetch_row() returneaza true daca un set de rezultate contine randuri neprelucrate, respectiv false in caz contrar. Ca atare, in general este mai convenabil sa se omita apelarea functiei mysql_num_rows() si sa se foloseasca in schimb o instructiune while, astfel:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S

while ($rand = mysql_fetch_row($rezultat))
A if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
// aici se prelucreaza randul din setul de rezultate
S

Valoarea returnata de functia mysql_fetch_row() reprezinta un tablou alcatuit din toate coloanele randului curent din tabel. Tabloul foloseste indexuri intregi, unde valoarea primului index este egala cu zero. Pentru a prelucra coloanele stocate in tablou, folositi o instructiune foreach, care elimina necesitatea existentei unui index explicit al buclei. De exemplu, iata o instructiune foreach care pur si simplu afiseaza valoarea din fiecare coloana a tabelului:

while ($rand = mysql_fetch_row($rezultat))
A if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S foreach ($rand as $coloana)
A echo „<BR>$coloana”;
S echo „<BR>”;
S

Daca doriti sa obtineti acces la valoarea unei anumite coloane, puteti face referire la elementul din tablou folosind un index. De exemplu, daca rezultatul functiei mysql_fetch_row() este stocat in variabila $rand, puteti obtine acces la prima coloana din setul de rezultate folosind sintaxa $randa0i, la a doua coloana folosind sintaxa $randa1i etc.
Daca vi se pare incomod sa lucrati cu indici numerici, puteti obtine randurile tabelului folosind functia mysql_fetch_array(), care returneaza un tablou asociativ. Valorile indexurilor 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 randuri in setul de rezultate.
Iata un exemplu de utilizare a functiei mysql_fetch_array():

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S

while ($rand = mysql_fetch_array($rezultat, MYSQL_ASSOC))
A if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S foreach ($rand as $coloana)
A echo „<BR>$nume=>$coloana”;
S echo „<BR>”;
S

La rulare, exemplul afiseaza numele si valoarea fiecarei coloane rezultate. Daca doriti sa obtineri accesul la valoarea unei anumite coloane, folositi numele coloanei ca index. De exemplu:

echo „<BR>” . $rowa„angajatnr”i;

<Sugestie>
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 asociativ, indexat cu numerele si numele coloanelor. </Sugestie>

<Test „la minut">
• Care este numele structurii de date asociate cu rezultatele unei interogari SELECT?
• Care este functia PHP MySQL ce returneaza numarul randurilor dintr-un set de rezultate?
• Care este functia PHP MySQL ce returneaza un tablou cu indexuri numerice, care contine randul unui set de rezultate?
• Care este functia PHP MySQL ce returneaza un tablou asociativ, care contine un rand al unui set de rezultate, indexat cu humele coloanelor din setul de rezultate? </Test „la minut">

<nota>
Raspunsurila test:
• Set de rezultate
• mysql_num_rows()
• mysql_fetch_row()
• mysql_fetch_array()</nota>

<Sfatul specialistului>
Intrebare: Anterior in cadrul acestui modul, s-a precizat ca functia mysql_insert_id() poate fi uneori nesigura. Cum este posibila o determinare sigura a valorii atribuite de MySQL drept cheie primara cu auto-incrementare a randului unui tabel?
Raspuns: Functia MySQL LAST_INSERT_ID() returneaza valoarea atribuita de MySQL unei coloane AUTO_INCREMENT, indiferent de tipul coloanei. Mai mult, apelurile ulterioare la functii MySQL nu invalideaza rezultatul returnat de LAST_INSERT_ID(), care este afectat numai de operatiile INSERT in care sunt im¬plicate coloane AUTO_INCREMENT.
Iata un exemplu care prezinta modul de obtinere a valorii LAST INSERT ID():

$interogare = "SELECT COUNT(*) LAST_INSERT_ID() FROM numetabel"; $rezultat = mysql_query($interogare); if (mysql_errno())
A die("<BR>" . mysql_errno().": ".mysql_error().”<BR>");
S
$rand = mysql_fetch_row($rezultat); if (mysql_errno())
A die("<BR>" . mysql_errno().": „.mysql_error()."<BR>”);
S echo "<BR>ID repartizat: $rowa0i";

Pentru a folosi aceste linii in propriul dumneavoastra program, inlocuiti numetabel cu numele tabelului actualizat. </Sfatul specialistului>

<titlu>Lucrul cu seturi de rezultate</titlu>
Biblioteca de functii MySQL a limbajului PHP include un set de functii care va permit sa obtineti informatii despre un set de rezultate, inclusiv:
• Numarul coloanelor din setul de rezultate
• Numarul fiecarei coloane
• Lungimea fiecarei coloane
• Indicatorii MySQL asociati coloanei
• Tipul MySQL al fiecarei coloane
• Numele tabelului MySQL care contine coloana, daca este cazul

De asemenea, biblioteca furnizeaza o functie care va permite sa obtineti acces in mod non-secvential la randurile din setul de rezultate, prin specificarea numarului unui rand.

<titlu>Obtinerea numarului coloanelor unui set de rezultate</titlu>
Pentru a obtine numarul coloanelor dintr-un set de rezultate, invocati functia mysql_num_fields(), transferand ca argument valoarea returnata de functia mysql_query().
De exemplu, programul urmator foloseste functia mysql_num_fields() pentru a determina numarul coloanelor dintr-un set de rezultate care contin randurile selectate folosind specificatorul SQL pentru campuri *:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$numar_campuri = mysql_num_fields($rezultat);

<titlu>Obtinerea numelui unei coloane din setul de rezultate</titlu>
Functia mysql_field_name() returneaza numele coloanei din setul de rezultate avand valoarea indexului data ca argument al functiei. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.
De exemplu, programul urmator foloseste functia mysql_field_name() pentru a determina numele primei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$nume = mysql_field_name($rezultat, 0);

<titlu>Obtinerea lungimii unei coloane dintr-un set de rezultate</titlu>
Functia mysql_field_len() returneaza lungimea maxima a coloanei dintr-un set de rezultate, avand valoarea indexului data ca argument al functiei. Indexul asociat primei coloane este 0, indexul asociat celei de-a doua coloane este l etc.
De exemplu, programul urmator foloseste functia mysql_field_len() pentru a determina lungimea maxima a primei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$lungime = mysql_field_len($rezultat, 0);

<titlu>Obtinerea indicatorilor MySQL asociati unei coloane a setului de rezultate</titlu>
Functia mysql_field_flags() returneaza indicatorii SQL asociati coloanei din setul de rezultate al carei index este dat ca argument al functiei. Indexul asociat primei coloane 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.
De exemplu, programul urmator foloseste functia mysql_field_flags() pentru a determina indicatorii asociati primei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$indicatori = mysql_field_flangs($rezultat, 0);

<titlu>Obtinerea tipului MySQL al unei coloane din setul de rezultate</titlu>
Functia mysql_field_type() returneaza tipul MySQL al unei coloane din setul de rezultate, coloana al carei index este dat ca argument al functiei. Indexul asociat primei coloane este 0, indexul asociat celei de-a doua coloane este l etc. Tabelul 13-1 descrie principalele tipuri MySQL returnate de aceasta functie.
De exemplu, programul urmator foloseste functia mysql_field_type() pentru a determina tipul primei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())

A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$tip = mysql_field_type($rezultat, 0);

<titlu>Determinarea tabelului MySQL asociat unei coloane din setul de rezultate</titlu>
Functia mysql_field_table() returneaza tabelul MySQL, daca exista, asociat coloanei din setul de rezultate al carei index este dat de argumentul functiei. Indexul asociat primei coloane este , indexul asociat celei de-a doua coloane este l etc. In cazul in care coloana contine o valoare calculata sau daca respectiva coloana nu este asociata in alt mod cu un tabel MySQL, functia returneaza un sir vid.
De exemplu, programul urmator foloseste functia mysql_field_table() pentru a determina tabelul asociat primei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$tabel = mysql_field_table($rezultat, 0);

<titlu>Obtinerea structurii complete a setului de rezultate</titlu>
Daca sunteti interesat in obtinerea mai multor caracteristici ale setului de rezultate, functia mysql_fetch_field() poate fi utila. Aceasta functie returneaza un obiect ale carui proprietati contin o varietate de informatii cu privire la coloana unui set de rezultate. Proprietatile sunt urmatoarele:
• blob are valoarea 1 in cazul in care coloana este de tip BLOB
• max_length — lungimea maxima a coloanei;
• multiple_key are valoarea 1 in cazul in care coloana este o cheie non-unica
• name - numele coloanei
• not_null are valoarea 1 in cazul in care coloana nu poate contine valoarea NULL
• numeric are valoarea 1 in cazul in care coloana este numerica
• primary_key are valoarea 1 in cazul in care coloana este o cheie primara
• table - numele tabelului MySQL caruia ii apartine coloana
• type - tipul MySQL al coloanei
• unique_key are valoarea 1 in cazul in care coloana este o cheie unica
• unsigned are valoarea 1 in cazul in care coloana este de tip UNSIGNED
• zerofill are valoarea 1 in cazul in care coloana este completata cu zerouri
Ca si functia conexa descrisa anterior in acest modul, functia mysql_fetch_field() preia doua argumente: valoarea returnata de functia mysql_query() si indexul

coloanei din setul de rezultate care va fi descrisa. Ca de obicei, indexul asociat primei coloane este , indexul asociat celei de-a doua coloane este l etc.

Iata un exemplu care prezinta modul de obtinere a structurii complete a setului de rezultate, inclusiv o descriere a fiecarei coloane din setul de rezultate:

$interogare = „SELECT * FROM angajat ”;
$rezultat = mysql_query($interogare); if (mysql_errno())
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$numar_campuri = mysql_num_fields($rezultat); for ($i = 0; $i < $numa_campuri; $i++)
A echo „<BR>Coloana $i: „;
$info = mysql_fetch_field($rezultat); if ($info)
A echo „<PRE> blob: $info->blob max_length: $info->max_length multipe_key: $info->multipe_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>”;
S else
A echo „Necunoscut”;
S
S

<titlu>Accesul non-secvential la coloanele unui set de rezultate</titlu>
Functiile mysql_fetch_row() si mysql_fetch_array() returneaza, in general, randu¬rile dintr-un set de rezultate in mod secvential. Totusi, functia mysql_data_seek() permite obtinerea accesului la randurile unui set de rezultate intr-o maniera non-secventiala. Functia are forma:

mysql_data_seek(rezultat, numa_rand)

unde rezultat este valoarea returnata de functia mysql_query(), iar numar_rand este indexul randului la care doriti sa obtineti accesul. Primul rand al setului de rezultate este numerotat cu l, al doilea cu 2 etc. Functia returneaza true daca executia reuseste, respectiv false in caz contrar. O invocare ulterioara a functiei

mysql_fetch_row() sau a functiei mysql_fetch_array() va returna randul din pozitia specificata a setului de rezultate.
De exemplu, urmatorul program obtine accesul la al doilea rand al setului de rezultate returnat de o interogare anterioara:

$ok = mysql_data_seek($rezultat, 1); if ($ok)
A die(„<BR>” .mysql_errno().”: „.mysql_error(). „<BR>”);
S
$rand = mysql_fetch_array($rezultat, MYSQL_ASSOC);

<Test „la minut">
• Precizati functia MySQL din biblioteca PHP cate returneaza numele unei coloane specificate dintr-un set de rezultate.
• Precizati functia MySQL din biblioteca PHP care returneaza tipul MySQL al unei coloane specificate dintr-un set de rezultate.
• Precizati functia MySQL din biblioteca PHP care returneaza numarul coloanelor dintr-un set de rezultate.
• Precizati functia MySQL din biblioteca PHP care permite accesul non-secvential la un set de rezultate. </Test „la minut">

<titlu>Explorarea SGBD</titlu>
Biblioteca MySQL aferenta limbajului PHP include trei functii care va permit sa determinati structura unei baze de date, in speta:
• Sa determinati bazele de date gazduite de serverul MySQL
• Sa determinati tabelele incluse intr-o baza de date specificata
• Sa determinati coloanele incluse intr-un tabel specificat dintr-o baza de date, precum si caracteristicile acestor coloane

<Sfatul specialistului>
Intrebare: Daca am scris interogarea care a returnat setul de rezultate, n-ar trebui sa cunosc deja structura acestuia? De ce trebuie sa invoc o functie pentru a determina, de exemplu, numele unei coloane din setul de rezultate?

<nota>
Raspunsuri la test:
• mysql_field_name();
• mysql_field_type();
• mysql_num_fields();
• mysql_data_seek()</nota>

Raspuns: Exista numeroase circumstante in care functiile descrise in aceasta sectiune se pot dovedi utile. O asemenea situatie apare cand formati o interogare folosind forma SELECT *. Ordinea in care este aranjat continutul unui set de rezultate nu este definita si poate varia in functie de versiunea MySQL pe care o utilizati. De asemenea, continutul setului de rezultate se va modifica la fiecare schimbare in structura tabelului supus interogarii. Un alt exemplu de situatie in care functiile respective sunt utile este o aplicatie care permite utiliza¬torilor sa emita interogari sau sa furnizeze date folosite la formarea interogarilor. Intr-un asemenea caz, structura setului de rezultate nu este cunoscuta in momen¬tul scrierii programului PHP. </Sfatul specialistului>

<titlu>Determinarea bazelor de date gazduite de un server</titlu>
Pentru a determina bazele de date gazduite de un server MySQL de care programul dumneavoastra este legat prin intermediul unei conexiuni active, invocati functia:

mysql_list_dbs()

Functia returneaza un set de rezultate special, alcatuit din numele bazelor de date gazduite. Puteti determina numarul randurilor din setul de rezultate invocand functia mysql_num_rows(), asa cum procedati in cazul unui set de rezultate normal. Cu toate acestea, trebuie sa preluati randurile folosind functia mysql_tablename(), care preia ca argumente valoarea returnata de functia mysql_list_dbs() si numarul randurilor care vor fi preluate. Randurile sunt numerotate incepand de la 0.
Iata un exemplu care prezinta modul de afisare a numelor bazelor de date gazduite:

$db = mysql_connect(„localhost”);
$dblist = mysql_list_dbs();
$n =mysql_num_rows($dblist); for ($i = 0; $i < $n; $i++)
A echo „<BR>” . mysql_tablename($dblist, $i);
S

Din motive de claritate, in exemplu nu se verifica aparitia unor eventuale erori MySQL; inainte de a folosi acest program, trebuie sa adaugati instructiuni adecvate de verificare a aparitiei erorilor.

<remarca>
PHP2 continea o functie, numita mysql_dbname(), folosita pentru regasirea numelor bazelor de date din structura de date returnata de mysql_list_dbs(). Totusi, in PHP4, pentru aceasta operatie trebuie folosita functia mysql_tablename ().</remarca>

<titlu>Determinarea tabelelor incluse intr-o baza de date</titlu>
Pentru a obtine o lista a tabelelor incluse intr-o baza de date specificata, invocati functia mysql_list_tables(), transferandu-i ca argument numele bazei de date. Programul dumneavoastra trebuie sa dispuna de o conexiune activa cu serverul MySQL; in caz contrar, functia esueaza. Functia mysql_list_tables() returneaza un set de rezultate special, similar celui returnat de mysql_list_dbs(). Pentru a obtine acces la lista cu tabele, parcurgeti prin iteratie setul de rezultate, invocand in mod repetat functia mysql_tablename().
Iata un exemplu care prezinta modul de obtinere si afisare a listei tabelelor asociate bazei de date testdb:

$db = mysql_connect(„localhost”), „php”, „salut”);
$tabele = mysql_list_tables(„testdb”);
$n =mysql_num_rows($tabele); for ($i = 0; $i < $n; $i++)
A echo „<BR>” . mysql_tablename($tabele, $i);
S

Din motive de claritate, in exemplu nu se verifica aparitia unor eventuale erori MySQL; totusi, inainte de a folosi acest program, trebuie sa adaugati instructiuni adecvate de verificare a aparitiei erorilor.
<Sugestie>
In cazul in care invocarea functiei mysql_num_rows() esueaza cu mesajul „Warning: Supplied argument is not a valid MySQL result resource*", probabil ca identificatorul de utilizator sau parola specificate la invocarea functiei mysql_connect() nu au permisiunea de a obtine acces la baza de date ale carei tabele incercati sa le afisati. </Sugestie>

<titlu>Determinarea coloanelor incluse intr-un tabel</titlu>
Pentru a obtine o lista a coloanelor incluse intr-un tabel, invocati functia mysql_list_fields(), transferandu-i ca argument numele bazei de date si numele tabelului. Programul dumneavoastra trebuie sa dispuna de o conexiune activa cu serverul MySQL; in caz contrar, functia esueaza. Functia mysql_list_fields() returneaza un set de rezultate similar celor returnate de functiile mysql_list_dbs() si mysql_list_tables(). Pentru a obtine acces la lista coloanelor si la caracteristicile acestora, invocati functia mysql_fetch_fields(). Alternativ, daca doriti sa obtineri acces la o singura caracteristica a coloanelor, puteti invoca una din functiile mysql_field_flags(), mysql_field_len(), mysql_field_name() sau mysql_field_type().

<nota>
*In traducere Avertisment: Argumentul furnizat nu constituie o resursa de tip rezultat MySQL. corecta. - N.T. </nota>

Iata un exemplu care va prezinta modul de obtinere a listei coloanelor si a caracteristicilor coloanelor din tabelul angajat al bazei de date testdb:

$db = mysql_connect(„localhost”), „php”, „salut”);
$campuri = mysql_list_fields(„testdb”, „angajat”);
$numar_campuri =mysql_num_fields($campuri); for ($i = 0; $i < $numar_campuri; $i++)
A echo „<BR>Coloana $i: ”;
$info = mysql_fetch_field($campuri); if ($info)
A echo „<PRE> blob: $info->blob max_length: $info->max_length multipe_key: $info->multipe_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>”;
S else
A echo „Necunoscut”;
S
S

Din motive de claritate, in exemplu nu se verifica aparitia unor eventuale erori MySQL. Din nou, inainte de a folosi acest program, trebuie sa adaugati instructiuni adecvate de verificare a aparitiei erorilor.

<Sugestie>
In cazul in care invocarea functiei mysql_list_fields() esueaza cu mesajul de eroare „1044: Access denied*", probabil ca identificatorul de utilizator sau parola specificate la invocarea functiei mysql_connect() nu au permisiunea de a obtine acces la tabelul din baza de date ale carui coloane incercati sa le afisati. </Sugestie>

<Sfatul specialistului>
Intrebare: Pot rula programul mysql in mod interactiv, pentru a vizualiza structura unei baze de date MySQL. Care ar fi, atunci, motivul pentru care as folosi functiile descrise in aceasta sectiune?
Raspuns: Functiile descrise in aceasta sectiune va permit sa determinati structura unei baze de date la rulare. Le puteti folosi, de exemplu, pentru a crea

<nota>
In traducere: Acces interzis. - N.T. </nota>

utilitare care permit unui utilizator sa modifice structura unei baze de date in mod interactiv. De asemenea, le puteti folosi pentru a crea formulare ce permit utilizatorilor care nu cunosc SQL sa formeze interogari SQL care raporteaza datele incluse intr-o baza de date MySQL. </Sfatul specialistului>

<Test Ia minut">
• Precizati numele functiei MySQL din biblioteca PHP care afiseaza numele bazelor de date gazduite de un server.
• Precizati numele functiei MySQL din biblioteca PHP care afiseaza numele tabelelor dintr-o baza de date MySQL.
• Precizati numele functiei MySQL din biblioteca PHP care mentioneaza coloanele dintr-un tabel al unei baze de date MySQL. </Test Ia minut">

<titlu>Ghilimele si ghilimele magice</titlu>
Sa presupunem ca incercati sa executati o interogare MySQL care este asemanatoare cu urmatoarea:

SELECT * FROM tabel WHERE text=’„Ce este asta?” intreba ea’;

Dincolo de alte aspecte, veti intampina unele dificultati, deoarece SQL nu permite inglobarea unor ghilimele simple in interiorul valorii unui sir. Probleme similare pot aparea cand un utilizator neatent sau cu intentii rele tasteaza un text ca acesta intr-o caseta cu text a unui formular HTML:

<INPUT TYPE=”TEXT” NAME=”parola”>

Daca emiteti o instructiune de reflectare a continutului casetei text fara sa va ganditi, veti descoperi ca pagina HTML rezultanta contine o caseta cu text nedorita.
PHP include functii si facilitati pentru rezolvarea acestor situatii. Aceasta sectiune prezinta unele tehnici pentru lucrul cu date utilizate la:
• Interogari SQL
• Pagini HTML
• Adrese URL

<titlu>Ghilimele magice</titlu>
Fisierul de initializare PHP, in speta php.ini, contine optiuni de configurare care controleaza modul in care PHP controleaza datele provenite de la o sursa externa, cum sunt un formular HTML, un fisier text sau o baza de date. Aceste optiuni sunt

<nota>
Raspunsuri la test:
• mysql_list_dbs()
• mysql_list_tables()
• mysql_list_fields()</nota>

proiectate pentru a va ajuta sa va adaptati la modalitatile deseori contradictorii in care browserele si bazele de date manipuleaza caracterele speciale, in general, administratorul de sistem configureaza fisierul php.ini atunci cand este instalat PHP; in general, utilizatorii obisnuiti nu trebuie sa aiba posibilitatea de a aduce modificari in fisier.
Optiunea magic_quotes_gpc specifica modul in care PHP manipuleaza operatiile HTTP GET si POST, precum si operatiile cu variabile cookie. Daca optiunea activata, PHP ignora in mod automat ghilimelele simple, ghilimelele duble, caracterele backslash si caracterele nule (caracterele a caror valoare ASCII este 0) care apar intr-o variabila HTTP, prefixand fiecare aparitie a acestor caractere cu un caracter backslash. In mod caracteristic, aceasta optiune este activata intr-o instalare prestabilita.
Optiunea magic_quotes_runtime specifica modul in care PHP manipuleaza datele de origine externa. Daca aceasta optiune este activata, PHP ignora automat ghilimelele simple si duble care apar in datele externe, inclusiv datele din formularele HTML, din fisiere si baze de date. In mod caracteristic, aceasta optiune este dez¬activata intr-o instalare prestabilita.
Daca este activata, optiunea magic_quotes_sybase modifica efectul optiunilor magic_quotes_gpc si magic_quotes_runtime, astfel incat un caracter de tip ghilimele simple sa fie prefixat cu un alt caracter de tip ghilimele simple, nu cu un backslas. Aceasta optiune respecta conventiile neobisnuite de manipulare a sirurilor, folosite de sistemul Sybase de gestiune a bazelor de date. In mod caracteristic, aceasta optiune este dezactivata intr-o instalare prestabilita.
Functiile get_magic_quotes_gpc() si get_magic_quotes_runtime() returneaza fiecare valoarea optiunii PHP corespunzatoare. Mai mult, puteti folosi functia set_magic_quotes_runtime() pentru a specifica valoarea optiunii magic_quotes_runtime pentru restul duratei scriptului PHP curent. De exemplu, pentru a dezactiva optiunea magic_quotes_runtime, invocati functia

set_magic_quotes_runtime(0);

Alternativ, pentru a activa optiunea magic_quotes_runtime, invocati functia

set_magic_quotes_runtime(0);

PHP nu furnizeaza nici o functie corespunzatoare care sa anuleze optiunea magic_quotes_runtime, deoarece optiunea respectiva este utilizata la transferul variabilelor HTTP catre un script. Dupa ce scriptul si-a inceput executia, valoarea optiunii respective nu mai este luata din nou in considerare.

<titlu>Conversia caracterelor speciale si anularea acesteia</titlu>

Cand PHP converteste* un sir, foloseste pentru aceasta functia addslashes(). Daca PHP nu este configurat astfel incat sa converteasca un text in mod automat, atunci dumneavoastra trebuie sa executati manual aceasta modificare. Pur si simplu invocati functia addslashes(), transferandu-i ca argument sirul text. De exemplu, pentru a converti continutul sirului $text si a plasa rezultatul in variabila $modificat, invocati functia dupa cum urmeaza:

$modificat = addslashes($text);

Functia stripslashes() executa operatia complementara de anulare a conversiei, adica elimina caracterele backslash inserate pentru conversia caracterelor de tip ghilimele simple, ghilimele duble, backslash si caractere nule. Pentru a anula con¬versia sirului $modificat si a plasa rezultatul in variabila $nemodificat, invocati functia dupa cum urmeaza:

$nemodificat = stripslashes($modificat)

<Sugestie>
PHP mai include o functie utila pentru conversia caracterelor speciale. Functia quotemeta() va insera un backslash inainte de fiecare aparitie a urmatoarelor caractere: . \ + * ? a ^ i ( $ ). </Sugestie>

<titlu>Conversia textelor HTML</titlu>
Cand lucrati cu texte HTML, conversia executata de functia addslashes() nu este suficienta, deoarece HTML este sensibil la alte caractere speciale decat cele convertite de functia addslashes(). Functia htmlspecialchars() converteste caracterele la care HTML este sensibil. Aceasta functie este utila pentru a exista garantia ca un anumit sir nu contine marcaje HTML, ceea ce poate fi important pentru a corecta modul de operare a unei aplicatii, cum ar fi o tabela de mesaje Web. Functia executa urmatoarele conversii:

<tabel>
*Caracter
*Rezultat convertit •

*& (ampersand)
*&amp;

*"(ghilimele duble)
*&quot; (numait cand este specificata optiunea ENT_COMPAT sau
ENT_QUOTES)

*'(ghilimele simple)
*&#39; (numai cand este specificata optiunea ENT_QUOTES)

*< (mai mic decat)
*&lt;

*> (mai mare decat)
*&gt;
</tabel>
<nota>
*Aceasta conversie nu trebuie confundata cu o alta, si anume conversia de tip. Conversia mentionata in acest capitol consta, de fapt, din modificarea semnificatiei anumitor caractere, pentru a preveni o interpretare eronata a acestora de catre programele specia¬lizate. Din acest motiv, toate conversiile mentionate in acest capitol vor face referire la modificarea semnificatiei unor caractere, nu la conversiile de tip. - N.T. </nota>

Functia are urmatoarea forma:

htmlspecialchars(text a,stil_ghilimelei)

unde text specifica sirul care contine textul ce urmeaza a fi convertit, iar argumen¬tul optional stil_ghilimele specifica modul de conversie a ghilimelelor simple, respectiv duble. Valorile permise ale optiunii stil_ghilimele sunt
• ENT_COMPAT precizeaza ca trebuie convertite numai ghilimelele duble
• ENT_QUOTES precizeaza ca trebuie convertite ambele tipuri de ghilimele
• ENT_NOQUOTES precizeaza ca nu trebuie convertit nici un tip de ghilimele De exemplu, pentru a converti toate caracterele HTML speciale, inclusiv ambele tipuri de ghilimele, din sirul $htmltext, invocati functia dupa cum urmeaza:

$convertit = htmlspecialchars($htmltext);

<Sugestie>
O functie PHP conexa, si anume htmlentities(), converteste toate caracterele cu echi¬valente in entitati HTML. in prezent, nu este acceptat decat setul de caractere ISO-8859-1 . </Sugestie>

<Sugestie>
PHP include o alta functie utila pentru conversia textelor HTML Functia n12br() insereaza caracterele <br> anterior fiecarui caracter de tip linie noua din argumentul sau. Incepand de la PHP 4.0.5, functia insereaza caracterele <br/>, in concordanta cu XHTML 1.0. </Sugestie>

<titlu>Conversia adreselor URL</titlu>
Cand PHP codifica date ca parte a unei adrese URL, asa cum procedeaza la efectuarea unei operatii HTTP GET, foloseste functia urlencode(). Aceasta functie inlocuieste fiecare caracter non-alfanumeric (cu exceptia spatiilor) cu un simbol al procentului (%), urmat de doua cifre hexazecimale care contin valoarea ASCII a caracterului. Spatiile sunt codificate sub forma de simboluri ale adunarii (+).
O functie conexa, in speta rawurlencode(), executa o conversie similara; cu toate acestea, functia respectiva inlocuieste spatiile cu %20, conform RFC 1738, standardul Internet pentru codificarea adreselor URL (vezi www. rfc.net).
Functiile urldecode() si rawurldecode() executa operatii complementare. Aceste functii sunt utile la crearea adreselor URL care includ perechi nume-valoare inglobate. De exemplu, sa presupunem ca scriptul dumneavoastra PHP trebuie sa creeze o pagina HTML care contine o hiperlegatura spre adresa URL a unui motor de cautare. Termenul de cautare trebuie transmis in forma codificata URL, pentru ca serverul Web si browserul sa nu se „impiedice" de caracterele speciale. Pentru a codifica datele, folositi un program PHP ca acesta:

echo ’A HREF=”www.mototdecautare.com?cuvantcheie=’, urlencode ($text), ’”> ’;

<Sfatul specialistului>
Intrebare: Sunt administratorul unui server PHP, Care sunt optiunile pentru ghilimele magice pe care ar trebui sa le activez?
Raspuns: Optiunile adecvate constituie obiectul unor oarecare contro¬verse. Interesele programatorilor PHP incepatori, care poate ca nu inteleg in totalitate necesitatea incadrarii datelor intre ghilimele, sunt cel mai bine reprezen¬tate prin activarea optiunilor magic_quotes_gpc si magic_quotes_runtime. In acest caz, optiunea magic_quotes_sybase trebuie activata numai daca principalul sistem de gestiune a bazelor de date folosit cu PHP este Sybase.
Pe de alta parte, multi programatori PHP priceputi sunt de parere ca ghilimele magice sunt o mare pacoste. Daca serverul dumneavoastra PHP este folosit mai ales de catre programatori PHP experimentati, trebuie sa aveti in considerare dezactivarea optiunilor legate de ghilimelele magice. </Sfatul specialistului>

<Test „la minut">
• Care este functia PHP folosita de catre ghilimelele magice din PHP pentru incadrarea intre ghilimele a datelor provenite din surse externe?
• Care este functia PHP ce poate fi utilizata pentru a elimina caracterele backslash adaugate prin caracteristica ghilimelelor magice?
• Care este optiunea de configurare PHP ce influenteaza datele transmise prin intermediul operatiilor HTTP GET si POST? </Test „la minut">

<titlu>Alte facilitati PHP de gestiune a datelor</titlu>
Biblioteca PHP furnizeaza acces la numeroase alte instrumente de gestiune a datelor. Sectiunea de fata trece in revista aceste instrumente, le descrie caracteristicile si situatiile cand isi pot dovedi utilitatea. Aceasta sectiune nu este menita a prezenta informatiile necesare pentru utilizarea instrumentelor descrise. In schimb, furnizeaza, referinte la carti sau siruri Web care va pot ajuta sa invatati mai multe despre fiecare instrument. Instrumentele prezentate nu sunt disponibile intr-o instalare PHP prestabilita; in general, administratorul dumneavoastra PHP trebuie sa le instaleze si sa le configureze separat din PHP.

<nota>
Raspunsuri la test:
• addslashes()
• stripslashes()
• magic_quotes_gpc

<titlu>Postgresql</titlu>
Ca si MySQL, Postgresql (pronuntat POST-gres-q-1), este un sistem de gestiune a bazelor de date provenit dintr-o sursa deschisa. Din perspectiva istorica, MySQL a fost sistemul de baze de date preferat de amatorii de performante brute si simplitate in utilizare, in timp ce Postgresql a fost optiunea favorita a celor care prefera caracteristicile mai complexe si scalabilitatea. Totusi, versiunile recente ale acestor sisteme au complicat problema, deoarece MySQL a acumulat unele caracteristici mai complexe, iar performantele sistemului Postgresql s-au imbunatatit.
Cu toate acestea, Postgresql continua sa accepte numeroase caracteristici care nu sunt inca oferite de versiunile MySQL standard, intre care amintim:
• Chei externe. Acestea permit respingerea automata a modificarilor din baza de date care nu respecta structura bazei de date.
• Subselectii. Acestea permit formarea unor interogari complexe, care reduc la minimum dimensiunea seturilor de rezultate trimise prin retea.
• Tranzactii. Acestea permit evitarea aplicarii incomplete asupra unei baze de date a unui set de modificari corelate, precum si alterarea datelor care deriva din procesul respectiv.
• Declansatoare. Permit specificarea de actiuni executate de serverul de baze de date ori de cate ori se produc anumite evenimente.
• Vederi. Permit furnizarea, in conditii convenabile, catre anumiti utilizatori, de acces la sub-seturi ale bazei de date.
Mai mult, Postgresql pare sa se adapteze mai bine decat MySQL la aplicatii carei implica mai multi utilizatori concurenti ai bazei de date. Daca sunteti interesat de Postgresql, consultati situl Web aferent acestuia, la adresa www.postgresql.org.

<Sugestie>
Utilizatorii de Linux Red Hat 7.1 pot instala suportul PHP pentru Postgresql prin instalarea pachetului RPM php-pgsql. </Sugestie>

<titlu>ODBC</titlu>
ODBC (Open Database Connectivity) este un standard creat de Microsoft, acum adoptat pe scara larga atat in mediile Microsoft, cat si in cele bazate pe UNIX/Linux. ODBC furnizeaza o facilitate minimala pentru accesul la bazele de date. In esenta, fiecare sistem comercial de gestiune a bazelor de date si majoritate sistemelor non-comerciale de gestiune a bazelor de date furnizeaza programe driver ODBC care permit accesul la aceste sisteme prin intermediul ODBC, nu numai prin intermediul unor programe driver native. ODBC este deosebit de important pentru cei care doresc sa obtina accesul la o baza de date gazduita de Microsoft dintr-un sistem UNIX/Linux.

Sistemele de operare create de Microsoft contin suport incorporat pentru ODBC. Astfel, daca rulati PHP sub un sistem de operare Microsoft, veti descoperi ca suportul ODBC este disponibil instantaneu. Totusi, sub UNIX/Linux trebuie sa instalati o punte ODBC-ODBC sau o alta facilitate care accepta ODBC. Solutiile comerciale le includ pe cele distribuite de Openlink (www.openlinksw.com) si Easysoft (www.easysoft.com). O alternativa provenita dintr-o sursa deschisa, in speta ODBCSocketServer, este disponibila la adresa sourceforge.net.

<titlu>LDAP</titlu>
Protocolul Lightweight Directory Access Protocol (LDAP) devine tot mai popular. Ca o baza de date obisnuita, o baza de date LDAP stocheaza date. O baza de date LDAP este insa foarte bine adaptata pentru stocarea cataloagelor, adica a unor liste cu persoane si unitati de organizare, precum si a caracteristicilor acestora. Bazele de date LDAP sunt proiectate pentru a stoca date relativ simple, rareori modificate. Astfel, acestea sunt ideale pentru stocarea informatiilor despre utiliza¬torii sistemului, in particular, LDAP accepta metode de comunicare sigure, care permit bazelor de date LDAP sa stocheze nume de utilizator si parole. LDAP furnizeaza mecanisme pentru replicarea bazelor de date LDAP in vederea protectiei integritatii datelor si asigura echilibrarea incarcarii, pentru a putea tolera sarcini de prelucrare de mari dimensiuni.
Pentru mai multe informatii despre LDAP, consultati volumul Implementing Directory Services (Implementarea serviciilor de catalog), de Archie Reed (Osborne/ McGraw-Hill, 2000).

<Sugestie>
Daca folositi Red Hat Linux 7.1, puteti instala suportul PHP pentru LDAP prin instalarea pachetului RPM php-pgsql. Apoi, modificati fisierul /etc/php.ini astfel incat sa contina linia (ne-comentata) "extension=ldap.so". Apoi, reporniti serviciul HTTP prin emiterea comenzii "service httpd restant".</Sugestie>

<titlu>XML</titlu>
Extensible Markup Language (XML) este un limbaj pentru descrierea datelor. Multi se asteapta ca, intr-un tarziu, XML sa inlocuiasca HTML ca limbaj dominant pentru schimbul informatiilor prin Internet, in timp ce HTML descrie aspectul datelor, XML este capabil de a descrie structura datelor (practic, XML este o moda¬litate de a trimite o mica baza de date prin Internet)
PHP accepta biblioteca xpat, bazata pe activitatea lui James Clark. Biblioteca va permite sa construiti un analizor pentru documentele XML. Un analizor intelege sintaxa unui document XML si poate identifica acele componente structurale care

alcatuiesc documentul. Asociind o functie cu fiecare tip de componenta, puteti configura analizorul astfel incat sa prelucreze sau sa converteasca un document XML.

<Sfatul specialistului>
Intrebare: Care sunt celelalte instrumente si caracteristici acceptate de PHP?
Raspuns: Bibliotecile PHP sunt extrem de cuprinzatoare. Alte instrumente de gestiune a datelor acceptate de PHP includ urmatoarele:
• dBase
• DBM
• dbx
• DOM XML
• FrontBase
• filePro
• Hyperwave Information Server
• Informix
• Interbase
• Ingres II
• Microsoft SQL Server
• mSQL
• Oracle si Oracle 8
• Extensia CORBA Satellite
• SESAM/SQL Server
• Sybase
• WDDX
• YAZ (protocolul Z39.50)
Pentru mai multe informatii despre aceste caracteristici ale limbajului PHP, consultati referintele prezentate in manualul PHP pe suport electronic, la adresa https://www.php.net. </Sfatul specialistului>
Pentru mai multe informatii despre XML, consultati pagina Web a organizatiei World Wide Web Consortium (https://www.w3.org/XML/). De asemenea, consultati volumul XML: The Complete Reference (XML - o referinta completa), de Heather , Williamson (Osborne/McGraw-Hill, 2001).

<Sugestie>
Daca folositi Red Hat Linux 7.1, pachetul PHP standard include suport pentru


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta