Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa
KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA

Uzimanje podataka iz baze

MySQL iskaz za čitanje podataka iz baze je SELECT. Postoje mnogo opcija i načina upotrebe iskaza SELECT i to:

SELECT podaci
FROM tabele
[WHERE uslov]
[GROUP BY grupisanje]
[HAVING uslov_grupe]
[ORDER BY redosled]
[LIMIT kriterijum_ogranicenja]

Upiti mogu računati i vrednosti izraza, što će mo objasniti malo kasnije. Sledeći upit isčitava sadržaj kolone "Ime" i "Grad" iz svih redova tabele "korisnici":

select Ime, Grad from Korisnici

Ako želimo da pročitamo sve kolone iz svih redova neke tabele onda ne moramo (a možemo) da pišemo sve kolone već samo stavimo operator zvezdicu " * " na sledeći način:

select * from Korisnici

A sad da vidimo kako se preuzimaju i obradjuju podaci iz baze u PHP skripte:

<?
include "veza.php";
$sql="SELECT * FROM Korisnici";
if (!$q=mysql_query($sql)){
  echo "Nastala je greska pri izvodjenju upita";
  exit;
}
if (mysql_num_rows($q)==0){
     echo "Tabela je prazna";
}else{
  $a=0;
  while ($redak=mysql_fetch_assoc($q)){
     $a=$a+1;
     $korisnici[$a]["korisnikID"]=$redak["KorisnikID"];
     $korisnici[$a]["ime"]=$redak["Ime"];
     $korisnici[$a]["adresa"]=$redak["Adresa"];
     $korisnici[$a]["grad"]=$redak["Grad"];
  }
}
for ($i=1; $i<=$a; $i++){
  echo $korisnici[$i]["korisnikID"].$korisnici[$i]["ime"].$korisnici[$i]["adresa"].>$korisnici[$i]["grad"]."<br>";
}
?>

Objasnimo sad ovaj kod:

include "veza.php";

Prvi kod same skripte je spajanje na MySql server i odabir baze, pa opet koristimo fajl veza.php.

$sql = "SELECT * FROM Korisnici";

Nije obavezno MySQL iskaze, to jest upite upisivati kao string u varijablu pa onda tu varijablu proslijeđivati mysql_query() funckiji. Mogli smo sam upit napisati direktno u mysql_query() funckiju. Npr. ovako:

mysql_query ("SELECT * FROM Korisnici");

Po meni je bolje kad se pohrani u varijablu jer kasnije možemo opet koristiti taj upit./p>

if (!$q = mysql_query($sql)){
     echo "Nastala je greska pri izvodjenju upita";
     exit;
}

Kao što vidite, ovog puta je kod koji izvršava SQL upit nešto drugačiji nego kod primera kada smo upisivali podatke u tabeli. Ovde smo rezultat mysql_query() funkcije pohranili u varijablu $q. Ovo je obavezno jedino kod izvršavanja SELECT upita jer da bi pribavili podatke koje taj upit vraća moramo sačuvati "pokazivač" na njegove rezultate.

Takodje ovde u istom trenutku i proveravamo da li se SQL upit pravilno izvršio. Ako nije izvršava se echo izraz i izlazi se iz skripte exit naredbom. Ali mysql_query() funckija vraća false samo u slučaju da je nastala neka greška pri obavljanju samog upita. Znači neka sintaksna greška ili nešto tehničke prirode, na primer kada ispadne server sa interneta što je obično izvan sfere PHP-a. Ali mysql_query() neće vratiti false ukoliko upit nije vratio ni jedan rezultat u slučaju da je tablica iz koje pribavljamo podatke prazna. Zato moramo proveriti da li ima rezultata za prikaz i ukoliko nema obavestiti korisnika i po potrebi ponuditi mu opcije šta može učiniti dalje. Tu proveru obavljamo sledecim kodom:

if (mysql_num_rows ($q) == 0){
     echo "Tabela je prazna";
}else{
...
}

Funkcija koja proverava da li postoje podaci u tabeli je mysql_num_rows(), i ona vraća broj jednak broju redova u tabeli. Ako nema podataka u tabeli onda nema ni jednog reda što znači da je u tom slučaju vraćen broj nula. Ova funkcija uvek mora da sledi iza provere ispravnog izvršenja SELECT upita, to jest izvršenja mysql_query() funkcije jer u suprotno može vratiti da nema podataka u tabeli a da u stvari ima podataka.

I konačno nakon svih ovih provera i upita došli smo do dela skripte koji prebacuje sve podatke iz tabele u niz sa dva indeksa $korisnici :

........
}else{
   $a = 0;
   while ($redak = mysql_fetch_assoc ($q)) {
      $a = $a+1;
      $korisnici[$a]["korisnikID"] = $redak["KorisnikID"];
      $korisnici[$a]["ime"] = $redak["Ime"];
      $korisnici[$a]["adresa"] = $redak["Adresa"];
      $korisnici[$a]["grad"] = $redak["Grad"];
   }
}

Rezultati iz baze podataka se prihvataju samo jedan po jedan i to samo unapred. Postoje više PHP funkcija za prihvat podataka iz baze. U našem primeru se koristi mysql_fetch_assoc(), a na raspolaganju su nam još mysql_fetch_row(), mysql_fetch_array(), i mysql_fetch_object(). Sve ove funckije pribavljaju celi red rezultata, samo se razlikuju u obliku u kojem ga vraćaju.

mysql_fetch_array() funkcija vraća dvodimenzionalni niz čiji elementi sadrže jedan red u tabeli baze sa svim kolonama koje se zahtevaju u MySQL SELECT iskazu. Svaki element niza je indeksiran brojem i imenom. A ime je isto kao i naziv kolone baze iz koje se podatak uzima. Da ovo ilustrujem na našem primeru. Mi pribavljamo polja : KorisnikID, Ime, Adresa, i Grad. Na primer na indeksu 0 i indeksu KorisnikID našeg vraćenog niza nalaziće se vrednost koja je u tabeli pohranjena u koloni KorisnikID unutar prvog reda. Funkcija mysql_fetch_array() je najkompletnija ali je i najsporija pa zato u našem primeru koristimo jednu od najbržih mysql_fetch_assoc(). Doduše brzine se razlikuju u milisekundama ali ako je sajt jako posećen onda to prerasta u sekunde.

mysql_fetch_row() funkcija takođe vraća niz ali jednodimenzionalni i u njemu postoje samo numerički indeksi. Ova funkcija je najbrža ali je i najmanje pregledna.

mysql_fetch_assoc() funkcija isto vraća jednodimenzioni niz, ali u njemu se nalaze tekstualno indeksirana polja što je čini preglednijom od funkcije mysql_fetch_row().

Brzina skripti koje koriste bazu podataka ponajviše zavisi od broja upita koje skripta obavlja kao i o kompleksnosti samih upita. Što je upit kompleksniji to je i sporiji. U najkompleksnije i najsporije upite recimo spadaju oni koji pribavljaju podatke iz dve ili više tabela sa kojima ćemo se kasnije upoznati, kao i upiti sa kompleksnim uslovima pribavljanja i pravilima sortiranja.

Četvrta navedena funckija, mysql_fethc_object() . Umesto niza ova funkcija vraća objekat stvoren od polja reda.

Sve gore navedene funkcije imaju zajedničko to da će vratiti false na kraju našeg skupa rezultata ako koristimo petlje koje ne proveravaju dokle da idu sa iteracijama. Zato ovo čini while petlju idealnim alataom za pribavljanje rezultata iz tabela baze jer će se obaviti onoliko puta koliko ima rezultata u tabeli. Još jedna zajednička stvar svim tim funckijama je da kao svoj argument dobijaju result identifier koji vraća mysql_query() funckija zbog čega taj rezultat moramo smestiti u promenjljivu $q.

Obzirom da funkcija mysql_fetch_assoc() preuzima vrednosti samo iz jednog reda i u sledećoj iteraciji petlje briše prethodne vrednosti i upisuje na njihova mesta vrednosti sledećeg reda iz tablice moramo nekako sačuvati sve podatke. Rešenje je da te podatke preuzima nov niz sa dve dimenzije koga smo u našem primeru imenovali sa $korisnici. Nakon toga sa podacima možemo raditi šta nam je volja a u našem primeru mi smo ih samo ispisali.

U nastavku objašnjavanja varijanti SELECT iskaza nećemo više navoditi PHP primere kao ovde jer bi kodovi tih skripti bili gotovo identični sa kodom iz ovog primera, jedino bi se razlikovao SQL upit. Zato će mo u nastavku samo objašnjavati varijante SELECT iskaza.

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija