PHP & MySQL (partea 1) – Tutorial (7)

PHP & MySQL (partea 1) – Tutorial (7)

Combinari si cautari
Unul dintre cele mai importante avantaje pe care le ofera PHP este suportul sau pentru o varietate de sisteme de gestiune pentru baze de date, inclusiv MySQL, PostgreSQL, Oracle si Microsoft Access. In virtutea acestui suport, developerii PHP pot crea aplicatii Web orientate pe date la un timp si la un cost redus fata de cele pe care le presupun alternativele lor competitive.

Folosind PHP si MySQL, developerii pot beneficia de economii substantiale asupra costurilor de licenta ale alternativelor comerciale, si de asemenea vor fi scutiti de uriasa cantitate de munca pe care au depus-o developerii PHP si MySQL pentru a se asigura ca cele doua pachete functioneaza impreuna fara nici o dificultate sau piedica. Si, din moment ce atat PHP si MySQL sunt proiecte open source, atunci cand le folosesti simultan, vei sti ca ti se ofera cea mai actualizata tehnologie disponibila.

OK. Sa trecem la treaba.
In aceasta editie a PHP 101, iti voi arata cum sa folosesti PHP pentru a extrage date dintr-o baza de date, iar apoi sa le folosesti pentru a construi dinamic o pagina Web. Pentru a incerca exemplele din acest tutorial, vei avea nevoie de o instalare functionala MySQL, pe care o poti obtine de pe site-ul MySQL http://www.mysql.com/. Daca esti familiarizat cu SQL (Limbaj de Interogare Structurat? limbajul folosit in interactiunea cu serverul unei baze de date) ti se va parea util, insa acest lucru nu este esential.

Construirea blocurilor
Pentru a utiliza MySQL si PHP, configuratia PHP trebuie sa includa suport pentru MySQL. In UNIX, acest lucru se realizeaza adaugand optiunea –with-mysql la script-ul configure in momentul instalarii PHP in UNIX, si marcand PHP in bibliotecile-client MySQL. In Windows, bibliotecile client MySQL sunt construite in PHP 4 si au activare prestabilita. In PHP 5, fisierele pre-construite .dll sunt incluse in cazul distributiei Windows. Poti citi mai mult pe aceasta tema la http://www.php.net/manual/en/ref.mysql.php.

Utilizatorii Unix ar trebui sa ia aminte la faptul ca PHP 4 ofera un set de biblioteci client MySQL care sunt activate automat; totusi, PHP 5 nu mai pune la dispozitie aceste biblioteci datorita unor probleme de licenta, asa ca va trebui sa le obtii, instalezi si activezi tu insuti. Ele sunt incluse in distributia MySQL si se instaleaza automat in momentul in care instalezi MySQL. Pentru a activa extensia MySQL, ext/mysql, adauga optiunea –with-mysql la scriptul de configurare PHP. Pentru mai multe informatii pe tema acestei modificari, citeste http://www.php.net/manual/en/faq.databases.php#faq.databases.mysql.php5.

Si, in sfarsit, (ca si cum toate aceste aspecte nu sunt destul de debusolante) PHP 5 mai aduce si o noua extensie MySQL, numita ext/mysqli (MySQL Improved). Poti folosi aceasta noua extensie pentru a accesa noile optiuni ale MySQL 4.1.2 sau ale unei versiuni si mai avansate, si pentru a te bucura de beneficiile unei viteze si securitati sporite. Pentru a activa aceasta extensie in UNIX, adauga optiunea –with-mysqli scriptului configure al PHP, si marcheaza PHP in programul mysql_config care vine odata cu MySQL 4.1 sau cu o varianta superioara. Pentru utilizatorii Windows, exista o versiune pre-construita a ext/mysqli, inclusa in distributia win32 PHP. Citeste mai mult pe aceasta tema la http://www.php.net/manual/en/ref.mysqli.php.

Pentru a-ti da seama de ce extensie ai nevoie, foloseste urmatorul procedeu empiric:
•Daca ai nevoie de noile optiuni din MySQL 4.1.2 sau dintr-o versiune mai avansata, sau daca folosesti o versiune mai veche a MySQL dar totusi doresti sa beneficiezi de perfectionarile la nivelul vitezei/securitatii din noua extensie, foloseste ext/mysqli.
•Daca nu apartii nici uneia dintre categoriile de mai sus, sau daca nici nu intelegi despre ce vorbesc, foloseste obisnuitul ext/mysql.
In caz ca te intrebai, acest tutorial acopera atat ext/mysql cat si ext/mysqli, asa ca le vei obtine pe amandoua ?la pretul uneia?. Continua sa citesti, si permite-mi sa te initiez in MySQL.

Magnetism animal
Orice baza de date MySQL se compune din unul sau mai multe tabele. Aceste tabele, care structureaza datele in randuri si coloane, sunt cele care organizeaza datele.

Iata un exemplu care iti prezinta aspectul unui tabel tipic:

+----+-----------+----------+
| id | country   | animal   |
+----+-----------+----------+
|  1 | America   | eagle    |
|  2 | China     | dragon   |
|  3 | England   | lion     |
|  4 | India     | tiger    |
|  5 | Australia | kangaroo |
|  6 | Norway    | elk      |
+----+-----------+----------+

Dupa cum poti remarca, un tabel imparte datele in randuri, cu o noua intrare (sau inregistrare) pe fiecare rand. Datele din fiecare rand sunt mai departe impartite in celule (sau campuri), fiecare dintre acestea continand o valoare pentru un anumit atribut al datelor. De exemplu, daca te uiti la inregistrarea corespunzatoare tarii “India”, vei vedea ca inregistrarea este in mod evident impartita in campuri separate pentru numarul inregistrarii, numele tarii si animalul national.

Randurile din cadrul unui tabel nu sunt aranjate intr-o ordine anume ? ele pot fi sortate alfabetic, dupa numar, sau dupa orice alt criteriu pe care alegi sa il specifici. Este deci necesar sa ai o metoda de identificare a anumitor inregistrari din tabel. In exemplul de mai sus, fiecare inregistrare este inidividualizata printr-un numar unic; acest camp unic se numeste cheia primara a tabelului.

Vei folosi Limbajul de Interogare Structurat, SQL, pentru a interactiona cu serverul MySQL si pentru a-i spune sa creeze un tabel, sa marcheze un camp ca fiind primar, sa insereze inregistrari, sa editeze inregistrari, sa extraga inregistrari… in principiu, orice implica manipularea datelor sau a bazei de date. Pentru a vedea cum functioneaza acest proces, studiaza urmatorul SQL, care creeaza tabelul de mai sus:

CREATE DATABASE testdb;
CREATE TABLE `symbols` (
    `id` int(11) NOT NULL auto_increment,
    `country` varchar(255) NOT NULL default '',
    `animal` varchar(255) NOT NULL default '',
    PRIMARY KEY  (`id`)
) TYPE=MyISAM;
INSERT INTO `symbols` VALUES (1, 'America', 'eagle');
INSERT INTO `symbols` VALUES (2, 'China', 'dragon');
INSERT INTO `symbols` VALUES (3, 'England', 'lion');
INSERT INTO `symbols` VALUES (4, 'India', 'tiger');
INSERT INTO `symbols` VALUES (5, 'Australia', 'kangaroo');
INSERT INTO `symbols` VALUES (6, 'Norway', 'elk');

Poti introduce aceste comenzi fie interactiv, fie ne-interactiv prin programul client din linii de comenzi MySQL, pe care il poti rula navigand in directorul mysql/bin de pe shell-ul tau sau din DOS si tastand ? fara ?;? intrucat aceasta este o comanda shell – fie mysql, fie mysql db_name daca vrei sa alegi o baza de date existenta cu care sa lucrezi. Citeste http://dev.mysql.com/doc/mysql/en/mysql.html pentru mai multe informatii despre cum sa folosesti clientul MySQL in linie de comanda, precum si tutorialul de pe http://www.melonfire.com/community/columns/trog/article.php?id=39 pentru a intelege ce indeplineste fiecare dintre comenzile SQL de mai sus. SQL seamana mult cu engleza vorbita, asa ca nu iti va lua foarte mult timp sa ti-l insusesti. Numai sa nu incerci sa transformi backtick-urile in ghilimele simple.

Odata ce datele au fost importate, ruleaza o interogare rapida SELECT pentru a verifica daca totul merge asa cum ar trebui:

mysql> SELECT * FROM `symbols`;
+----+-----------+----------+
| id | country   | animal   |
+----+-----------+----------+
|  1 | America   | eagle    |
|  2 | China     | dragon   |
|  3 | England   | lion     |
|  4 | India     | tiger    |
|  5 | Australia | kangaroo |
|  6 | Norway    | elk      |
+----+-----------+----------+
6 rows in set (0.06 sec)

In engleza, interogarea de mai sus inseamna “arata-mi toate inregistrarile din tabelul intitulat symbols”. Daca ai vizualizat aceleasi iesiri ca si mai sus, esti gata sa pornesti!

Salut, baza de date!
Acum, sa folosim PHP pentru a realiza exact acelasi lucru. Ai putea folosi PHP de la bun inceput pentru a construi baza de date, dar avand in vedere ca in cazul nostru, ea deja exista, vom lansa pur si simplu o interogare SELECT asupra bazei de date ‘testdb’, si vom afisa rezultatele intr-o pagina HTML:

<html>
<head>
<basefont face="Arial">
</head>
<body>
<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// deschide conexiunea 
$connection = mysql_connect($host, $user, $pass) or die ("Nu ma pot
conecta la serverul MySQL!"); 

// selecteaza baza de date 
mysql_select_db($db) or die ("Nu pot selecta baza de date!"); 

// creeaza interogarea 
$query = "SELECT * FROM symbols"; 

// executa interogarea 
$result = mysql_query($query) or die ("Interogarea SQL contine o
eroare: $query. ".mysql_error()); 

// verifica daca interogarea a returnat vreun rand 
if (mysql_num_rows($result) > 0) {
    // daca da 
    // afiseaza randurile returnate unul dupa altul 
    echo "<table cellpadding=10 border=1>";
    while($row = mysql_fetch_row($result)) {
        echo "<tr>";
        echo "<td>".$row[0]."</td>";
        echo "<td>".$row[1]."</td>";
        echo "<td>".$row[2]."</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    // daca nu 
    // afiseaza mesaj 
    echo "Nu a fost gasit nici un rand!";
} 

// elibereaza memoria 
mysql_free_result($result); 

// inchide conexiunea cu baza de date 
mysql_close($connection);
?>
</body>
</html>
Iata cum arata rezultatul:
1 America eagle
3 England lion
4 India tiger
5 Australia kangaroo
6 Norway elk
 

Dupa cum poti vedea, utilizarea PHP-ului pentru a extrage date dintr-o baza de date presupune mai multi pasi, fiecare dintre acestia fiind de fapt o functie PHP pre-definita. Sa analizam fiecare pas:

1. Primul lucru care trebuie facut este sa specificam anumite informatii importante, care sunt necesare stabilirii unei conexiuni la serverul bazei de date. Aceste informatii cuprind numele serverului, numele de utilizator si parola necesara pentru a o accesa, precum si numele bazei de date pe care se efectueaza interogarea. Toate aceste valori se construiesc in variabile PHP regulate.

<?php
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb";
?>

2. Pentru a incepe comunicarea cu un server de baze de date MySQL, trebuie sa deschizi o conexiune la acel server. Orice comunicare intre PHP si serverul bazei de date va avea loc prin intermediul acestei conexiuni.

Pentru a initializa aceasta conexiune, PHP ofera functia mysql_connect():

<?php
$connection = mysql_connect($server, $user, $pass);
?>

Toti parametrii din mysql_connect() sunt optionali, insa exista trei anume de care vei avea in general nevoie pentru a-i folosi, de pe orice computer de pe care lucrezi: numele serverului bazei de date, numele de utilizator si parola. In cazul in care serverul bazei de date si serverul Web sunt localizate fizic pe acelasi computer, poti folosi localhost ca nume pentru serverul bazei de date, aceasta fiind de fapt valoarea pre-stabilita pe care o furnizeaza PHP.

mysql_connect() va returna un “identificator de link”, care este stocat in variabila $connection. Acest identificator este folosit in comunicarea cu baza de date.

3. Odata ce esti conectat la baza de date, trebuie sa selectezi o baza de date in vederea utilizarii, cu ajutorul functiei mysql_select_db():

<?php
mysql_select_db($db) or die ("Nu pot selecta baza de date!");
?>

Acestei functii trebuie sa ii fie furnizat numele bazei de date ce va fi folosita pentru toate interogarile ulterioare. Un argument secundar optional ar fi identificatorul de link; daca nu se specifica nici un identificator, se considera ca atare ultimul link deschis. Daca ai doua sau mai multe conexiuni de baze de date deschise concomitent, este indicat sa specifici identificatorul de link ca argument secundar al mysql_select_db() ? si de asemenea al oricarei alte functii mysql_* din script, astfel incat PHP sa nu faca confuzii cu privire la unde trebuie sa foloseasca o conexiune, si unde pe cealalta.

4. Urmatorul pas este sa creezi o interogare si sa o executi. Acest lucru se realizeaza cu functia the mysql_query().

<?php
$query = "SELECT * FROM symbols";
$result = mysql_query($query) or die ("Interogarea SQL contine o
eroare: $query. ".mysql_error());
?>

Aceasta functie necesita de asemenea doi parametri: sirul de interogare si identificatorul de link pentru conexiune. Din nou, daca nu se specifica nici un identificator de link, se va folosi ultimul link deschis. In functie de reusita sau esecul interogarii, functia va returna true sau false; un eventual esec poate fi detectat prin intermediul clauzei …or die() a functiei, iar functia mysql_error() poate fi folosita pentru a afisa mesajul corespunzator de eroare.

5. Daca mysql_query() se realizeaza cu succes, setul de rezultate returnat de catre interogare va fi stocat in variabila $result. Acest rezultat poate contine unul sau mai multe randuri sau coloane de date, in functie de interogarea ta. Poti extrage anumite subseturi ale setului de rezultate cu alte functii PHP, inclusiv cea folosita aici – functia mysql_fetch_row() – care extrage un singur rand de date ca o matrice numita $row. Campurile din acest rand pot fi apoi accesate folosind sistemul standard de notatii PHP. De fiecare data cand apelezi mysql_fetch_row(), se va returna urmatoarea inregistrare din setul de rezultate. Acest lucru face ca mysql_fetch_row() sa fie deosebit de potrivit pentru utilizarea intr-o bucla while() sau for().

<?php 

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)) {
        echo "<td>".$row[0]."</td>";
        echo "<td>".$row[1]."</td>";
        echo "<td>".$row[2]."</td>";
    }
}
?>

Retine faptul ca apelarea  mysql_fetch_row() este inclusa intr-un instructiune conditionala, care mai intai verifica daca s-a returnat vreun rand. Aceasta informatie este furnizata de  catre functia mysql_num_rows(), care contine numarul de randuri returnat de catre interogare. Evident, poti folosi aceasta functie doar pentru interogarile care returneaza date, cum ar fi SELECT or SHOW. Ea nu este adecvata pentru a fi utilizata in cazul INSERT, UPDATE, DELETE sau alte interogari de acest tip. Mai exista si alte cateva alternative la mysql_fetch_row(), care vor fi explicate mai jos.

In sfarsit, pentru ca fiecare set de rezultate returnat in urma unei interogari ocupa memorie, o practica buna este aceea de a utiliza functia mysql_free_result() pentru a elibera memoria folosita. Odata ce rezultatul este eliberat, si daca nu intentionezi sa mai rulezi alte interogari, poti inchide conexiunea la serverul MySQL cu mysql_close().

<?php 

mysql_free_result($result);
mysql_close($connection); 

?>
Diverse  abordari...
 De asemenea, poti folosi functiile PHP mysql_fetch_row() si list() pentru a obtine o simpla matrice de valori, iar apoi pentru a aloca aceste valori diverselor variabile – o varianta a tehnicii prezentate in sectiunea precedenta. Arunca o privire (doar bucla while() se schimba):
<html>
<head>
<basefont face="Arial">
</head>
<body> 

<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// deschide conexiunea
$connection = mysql_connect($host, $user, $pass) or die ("Nu ma pot
conecta la serverul MySQL!"); 

// selecteaza baza de date 
mysql_select_db($db) or die ("Nu pot selecta baza de date!"); 

// creeaza interogarea 
$query = "SELECT * FROM symbols"; 

// executa interogarea
$result = mysql_query($query) or die ("Interogarea SQL
contine o eroare: $query. ".mysql_error()); 

// verifica daca interogarea a returnat vreun rand 
if (mysql_num_rows($result) > 0) {
    // daca da
    // afiseaza randurile returnate unul dupa altul
    echo "<table cellpadding=10 border=1>";
    while(list($id, $country, $animal) = mysql_fetch_row($result)) {
        echo "<tr>";
        echo "<td>$id</td>";
        echo "<td>$country</td>";
        echo "<td>$animal</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    // daca nu 
    // afiseaza mesaj 
    echo "Nu a fost gasit nici un rand!";
} 

// elibereaza memoria 
mysql_free_result($result); 

// inchide conexiunea cu baza de date 
mysql_close($connection); 

?> 

</body>
</html>

In acest caz, functia list() este folosita pentru a aloca diverse elemente ale setului de rezultate unor variabile  PHP, care sunt apoi folosite in redarea paginii. Poti folosi functia PHP mysql_fetch_assoc() pentru a reprezenta fiecare rand ca o matrice asociativa de perechi camp-valoare – o variatie minora a tehnicii folosite mai sus:

<html>
<head>
<basefont face="Arial">
</head>
<body> 

<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// deschide conexiunea 
$connection = mysql_connect($host, $user, $pass) or die ("Nu ma pot
conecta la serverul MySQL!"); 

// selecteaza baza de date 
mysql_select_db($db) or die ("Nu pot selecta baza de date!"); 

// creeaza interogarea  
$query = "SELECT * FROM symbols"; 

// executa interogarea 
$result = mysql_query($query) or die ("Interogarea SQL
contine o eroare: $query. ".mysql_error()); 

// verifica daca interogarea a returnat vreun rand
if (mysql_num_rows($result) > 0) {
    // daca da 
    // afiseaza randurile returnate unul dupa altul
    echo "<table cellpadding=10 border=1>";
    while($row = mysql_fetch_assoc($result)) {
        echo "<tr>";
        echo "<td>".$row['id']."</td>";
        echo "<td>".$row['country']."</td>";
        echo "<td>".$row['animal']."</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    // daca nu 
    // afiseaza mesaj 
    echo "Nu a fost gasit nici un rand!";
} 

// elibereaza memoria 
mysql_free_result($result); 

// inchide conexiunea cu baza de date 
mysql_close($connection); 

?> 

</body>
</html>

Observa faptul ca in acest caz, valorile campurilor se acceseaza folosind numele campului in loc de index.
Totusi, dintre toate alternativele, functia pe care o prefer cel mai mult este  mysql_fetch_object(), care returneaza fiecare rand ca un obiect cu proprietati ce corespund numelor campurilor:

<html>
<head>
<basefont face="Arial">
</head>
<body> 

<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// deschide conexiunea 
$connection = mysql_connect($host, $user, $pass) or die ("Nu ma pot
conecta la serverul MySQL!"); 

// selecteaza baza de date 
mysql_select_db($db) or die ("Nu pot selecta baza de date!"); 

// creeaza interogarea 
$query = "SELECT * FROM symbols"; 

// executa interogarea 
$result = mysql_query($query) or die ("Interogarea SQL
contine o eroare: $query. ".mysql_error()); 

// verifica daca interogarea a returnat vreun rand 
if (mysql_num_rows($result) > 0) {
    // daca da 
    // afiseaza randurile returnate unul dupa altul 
    echo "<table cellpadding=10 border=1>";
    while($row = mysql_fetch_object($result)) {
        echo "<tr>";
        echo "<td>".$row->id."</td>";
        echo "<td>".$row->country."</td>";
        echo "<td>".$row->animal."</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    // daca nu 
    // afiseaza mesaj 
    echo "Nu a fost gasit nici un rand!";
} 

// elibereaza memoria 
mysql_free_result($result); 

// inchide conexiunea cu baza de date 
mysql_close($connection); 

?> 

</body>
</html>

Aici, fiecare obiect $row este creat cu proprietati ce corespund numelor campurilor din acel rand. Valorile de pe rand pot fi accesate folosind notatia standard object->property. Daca esti genul caruia ii place sa profite de toate beneficiile, probabil te vei bucura de functia mysql_fetch_array(), care returneaza atat o matrice asociativa cat si o matrice cu indici numerici, o combinatie intre functia mysql_fetch_row() si mysql_fetch_assoc(). Citeste despre asta la http://www.php.net/manual/en/function.mysql-fetch-array.php.

Pentru diferite gusturi...
Daca folosesti PHP 5, poti face acelasi lucru folosind noua extensie ext/mysqli, care ofera o serie de noi optiuni. Aceasta extensie poate fi folosita in doua moduri: procedural (utilizand functii), si cu orientare pe obiecte (utilizand metode si proprietati de clasa). Studiaza scriptul urmator, care foloseste uses ext/mysqli intr-un mod procedural:

<html>
<head>
<basefont face="Arial">
</head>
<body> 

<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// deschide conexiunea 
$connection = mysqli_connect($host, $user, $pass, $db) or die ("Nu ma pot
conecta la serverul MySQL!"); 

// creeaza interogarea 
$query = "SELECT * FROM symbols"; 

// executa interogarea 
$result = mysqli_query($connection, $query) or die ("Interogarea SQL
contine o eroare: $query. ".mysqli_error()); 

// verifica daca interogarea a returnat vreun rand 
if (mysqli_num_rows($result) > 0) {
    // daca da 
    // afiseaza randurile returnate unul dupa altul 
    echo "<table cellpadding=10 border=1>";
    while($row = mysqli_fetch_row($result)) {
        echo "<tr>";
        echo "<td>".$row[0]."</td>";
        echo "<td>".$row[1]."</td>";
        echo "<td>".$row[2]."</td>";
        echo "</tr>";
    }
    echo "</table>";
}
else {
    // daca nu 
    // afiseaza mesaj 
    echo "Nu a fost gasit nici un rand!";
} 

// elibereaza memoria 
mysqli_free_result($result); 

// inchide conexiunea 
mysqli_close($connection); 

?> 

</body>
</html>

Dupa cum poti vedea, seamana mult cu codul scris pentru ext/mysql. Singura diferenta reala— cel putin la prima vedere – este faptul ca numele functiilor incep in acest caz cu mysqli_* in loc de mysql_*. Desigur, mai exista destule diferente in profunzime: ext/mysqli este mai rapid, mai sigur si mai puternic decat obisnuita ext/mysql, incluzand de asemenea suport pentru instructiuni predefinite, seturi de rezultate, interogari multiple simultane, tranzactii si o groaza de alte lucruri marfa. Poti folosi de asemenea  ext/mysqli intr-o modalitate de orientare pe obiecte, in care fiecare sarcina – conectare, interogare, extragere – reprezinta de fapt o metoda a obiectului mysqli():

<html>
<head>
<basefont face="Arial">
</head>
<body> 

<?php 

// seteaza variabilele de acces la serverul MySQL 
$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb"; 

// creeaza obiectul mysqli
// deschide conexiunea 
$mysqli = new mysqli($host, $user, $pass, $db); 

// verifica daca au aparut erori la conectare 
if (mysqli_connect_errno()) {
    die("Nu ma pot conecta la serverul MySQL!");
} 

// creeaza interogarea 
$query = "SELECT * FROM symbols"; 

// executa interogarea 
if ($result = $mysqli->query($query)) { 

    // verifica daca interogarea a returnat vreun rand 
    if ($result->num_rows > 0) {
        // daca da 
        // afiseaza randurile returnate unul dupa altul 
        echo "<table cellpadding=10 border=1>";
        while($row = $result->fetch_array()) {
            echo "<tr>";
            echo "<td>".$row[0]."</td>";
            echo "<td>".$row[1]."</td>";
            echo "<td>".$row[2]."</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    else {
        // daca nu 
        // afiseaza mesaj 
        echo "Nu a fost gasit nici un rand!";
    } 

    // elibereaza memoria 
    $result->close();
}
else {
    // afiseaza mesaj de eroare 
    echo "Interogarea SQL contine o eroare: $query. ".$mysqli->error;
} 

// inchide conexiunea 
$mysqli->close(); 

?> 

</body>
</html>

Aici, noul cuvant cheie este folosit pentru a instantia un obiect din clasa mysqli, si pentru a da informatia de conexiune a constructorului de obiect (inclusiv numele bazei de date). Obiectul care rezulta, stocat in variabila $mysqli, va expune apoi metode si proprietati pentru a indeplini sarcini de interogare, extragere si procesare a randurilor, precum si de tratare a erorilor. Daca te uiti atent la cele doua scripturi de mai sus, vei remarca numeroasele similitudini dintre numele functiei si cel al metodei, precum si structura scriptului. Dintre cele doua, se recomanda totusi metoda de orientare pe obiecte, mai ales in daca avem in vedere noul model de obiect din PHP 5. Alte cateva diferente importante de retinut:

  • Cu ext/mysqli, poti include numele bazei de date in argumentele asociate functiei mysqli_connect() sau constructorului mysqli().
  • Atunci cand apelezi  mysqli_query() sau metoda de interogare query() a obiectului mysqli, identificatorul de link este obligatoriu, si nu optional.

Pentru a afla mai multe despre PHP si MySQL, citeste continuarea acestui tutorial : PHP & MySQL (partea 2)

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Please leave these two fields as-is: