E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

VIII. PHP si MySQL (partea I)

29.05.2008
VIII. PHP si MySQL (partea I)

In acest tutorial vei vedea cum sa folosesti PHP pentru a extrage informatii dintr-o baza de date, utilizand apoi aceste informatii pentru a construi o pagina Web dinamica.

Total vizualizari: 10814 10814 afisari   |   Comentarii  1   |   Rating   |   (6 voturi)   |   Timp necesar: 1h 1h   |   Nivel de cunostiinte necesar: Incepator  Incepator

Sursa:  Zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 123 4
comenteaza printeaza

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 : IX. PHP si MySQL (partea a II-a)

Pagina:
« 123 4
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(6 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
gexe , Miercuri, 10 Octombrie 2012, ora 05:44
#1

cum adaug in acest script numele coloanelor ? de exemplu pentru $row[0] care este in cazul meu "id" si as vrea sa-mi apara nr.crt ca nume al coloanet

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
5050
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5005
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4845
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4825
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4620
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
COREL DRAW Gimp Vista RoR SWF AJAX Powerpoint SEO Sony Vegas Excel Fireworks Lightroom Verilog Swift 3D Illustrator Flash HTML Javascript PSD Outlook Fotografie Action Script JSON CSS Dreamweaver Java Photoshop Word PHP XHTML Bridge Python StyleSheet XML Ruby on Rails MySQL
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software