Pristup bazi podataka i prikaz

napisao pedja, 13.03.2009, pod Programiranje

Kako pristupiti bazi podataka i kako prikazati podatke koji se nalaze u njoj? Ovo je još jedan od problema sa kojim se susreću početnici. Ovde će biti objašnjen pristup MySQL bazi, tj. jedan od načina.

Otvaranje konekcije

Za početak je potrebno otvoriti konekciju ka serveru i pristupiti bazi podataka:

global $db;
$host = 'localhost';
$user = 'root';
$pass = '';
$database = 'ime_baze';

$db = mysql_connect($host, $user, $pass) or die(mysql_error());

mysql_select_db ($database, $db) or die(mysql_error());

Funkcija mysql_connect otvara konekciju ka serveru, a parametri koje prihvata su:

  • $host koji je ime servera, i u našem slučaju vrednost joj je “localhost“, koja predstavlja lokalni server, tj. server na kojem se izvršava ova aplikacija. Često se dešava i da serveri koji hostuju php, a koji se nalaze na internetu, imaju ovakvu postavku, tj. da se Apache/PHP i MySQL nalaze na jednom računaru. U slučaju da je drugačije, te podatke ćete dobiti od kompanije koja pruža usluge hostovanja.
  • $user i $pass su korisničko ime i šifra za pristup serveru. Na lokalnim serverima, kao što je server koji je instaliran u prethodnom postu, “root je korisničko ime, a šifra je prazna. Takođe ove podatke za potrebe pristupa produkcionom serveru, koji se nalazi tamo negde u dubinama Interneta, ćete dobiti prilikom zakupa servera.

U slučaju da dođe do greške, koja može biti, npr. pogrešno ukucan neki od parametara koje sam spomenuo, ili jednostavno nemogućnost da zbog više sile pristupimo serveru, skript će prestati sa radom. To je deo koda iza funkcije mysql_connect, tj deo die(mysql_error()). Funkcija die() momentalno prekida izvršenje skripta, i ispisuje poruku. Poruka u ovom slučaju je rezultat funkcije mysql_error(). Takođe ovo ispisivanje greške možete učiniti više čitljivijim, pa će prilikom prekida ispisati neku razumljiviju poruku, umesto samo jednostavnog die(mysql_error()).

$db = mysql_connect($host, $user, $pass) or
      die('Nije moguće uspostaviti konekciju sa : ' . mysql_error());

Mada ovo i nije neophodno, na ovom mestu, jer ukoliko dođe do grške na ovom mestu, onda obično nešto nije u redu sa serverom.

Ako sve prođe kako treba u promenljivoj $db će se nalaziti link ka serveru koji je potreban ostalim funkcijama da pristupile tačno određenom serveru.

Funkcija mysql_select_db prihvata dva  parametra: $database koji sadrži naziv baze koju ćete koristiti u vašoj aplikaciji i $db (koji je objašnjen u prethodnim pasusima). Ukoliko i ovde dođe do greške prekinuće se izvršavanje skripte i biće ispisana poruka, koju takođe možete učiniti čitljivijom, kao što je predloženo i u prethodnom slučaju.

Kodni raspored

Ono što nisam napisao na početku, a zna da bude dosta korisno, je postavljanje kodnog rasporeda po kojem će raditi komunikacija sa serverom. Topla preporuka je korišćenje UTF-8 kodnog rasporeda koji podržava  unos i ćirilice i latinice u istom tekstu, kao i mnogih drugih karaktera. Razlog za ovo je što su serveri na ineternetu različito podešeni, pa im je i kodni raspored pod kojim raderazličit. Dovoljno je dodati ovaj kod:

mysql_query("/*!40101 SET NAMES 'utf8' */");

Upit i rezultat

Sledeća stvar koja vam treba je slanje upita i preuzimanje rezultata tog upita. Način na koji većina krene, je da uzme primer iz PHP help-a ili neke knjige, i koristi ga na svim mestim gde se radi upit ka bazi, a kod obično izgleda ovako

$result = mysql_query("select * from bla_bla");
while ($row = mysql_fetch_array($result))
{
  // ovde obično ide ispis
}

Recimo prva stvar na kojoj ovakav kod puca, je ako nema rezultata. Ono što počinje od jednostavnog koda počinje da raste u relativno komplikovna kod, i sve to se kopira prilikom svakog upita. Rešenje je napraviti jednu funkciju koja će sve to da uradi na jednom mestu.

Ovo je primer jedne takve funkcije, a sličnu funkciju sam koristio u svim svojim projektima.

function query($sql, $showSQL = 0)
{
  global $db;
  $out = array();
  $error = false;

  $result = mysql_query($sql, $db);

  if (is_resource($result))
  {
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
      $out[] = $row;
    mysql_freeresult($result);
  }
  else
  {
    $error = true;
    echo '<p>'. mysql_error($db) .'</p>';
  }

  if ($showSQL || $error)
  {
    echo '<pre>';
    print_r ($sql);
    echo '</pre>';
  }
  if($error) die();

  return $out;
}

Ova funkcija prihvata dva parametra, prvi je $sql, koji predstavlja običan SQL upit, i drugi prametar je $showSQL koji služi za ispis trenutno pokrenutog upita, korisno ako želite da znate kako izgleda upit koji ste pokrenuli. Ova funkcija vam omogućava da u slučaju greške u upitu vidite upit, tako da možete videti šta je dovelo do greške. Druga stvar je što je rezultat vraćen u nizu, što će pomoći svima koji rade sa nekim sistemom šablona (SMARTY template).

Upotreba je laka, dovoljno je proslediti upit i dobićete niz koji sadrži rezultat upita.

Pretpostavimo da imamo tabelu “korisnik” koja ima sledeća polja: “id”, “ime_prezime” i “god_rodj”, i da želimo da prikažemo sadržaj te tabele, kod bi izgledao ovako:

$rezultat = query("SELECT * FROM korisnik ORDER BY ime_prezime");
$total = count($rezultat);
if ($total > 0)
{
  echo '<table>';
  echo '<tr><th>Ime i prezime</th><th>God. rođenja</th></tr>';

  for ($i=0;$i<count($rezultat);$++)
    echo '<tr><td>'. $rezultat[$i]['ime_prezime'] .'</td><td>'. $rezultat[$i]['god_rodj'] .'</td></tr>';
  echo '</table>';
}
else
  echo 'Nema podataka za prikaz!';

I to je to, ispisali sadržaj tabele, i još imate poruku da vam je tabela prazna ako je broj vraćenih rezutata jednak nuli.

Ova funkcija je dovoljna za sve vrste upita. E sad ima jedan mali problem ako želite da izvučete samo jedan određen slog. Taj slog će biti vraćen kao niz sa jednim elementom. Zato ćemo napraviti još jednu funkciju, koja će samo da poveća komfor u radu.

function query_row($sql, $showSQL = 0)
{
  $result = query($sql, $showSQL);
  return $result[0];
}

Upotreba ove funkcije je ista kao i prethodne, samo rezultat je malo drugačiji.

$rezultat = query_row("SELECT * FROM korisnik WHERE id = 7");
if ($rezultat)
{
  echo '<p>Ime i prezime: '. $rezultat['ime_prezime'] .'</p>';
  echo '<p>God. rođenja: '. $rezultat['god_rodj'] .'</p>';
}
else
  echo '<p>Nema podataka za prikaz!<p>';

Ovo bi bilo sve što vam je potrebno da bi na lak način pristupali bazi podataka, mnogo je preglednije i lakše da održavate kod sa ovakvom funkcijom nego da svaki put pišete sve što je potrebno pre svakog pristupa bazi.


Ostavi komentar

Posetite naše prijatelje!

Tražite nešto?

Koristite donju formu za pretragu:

Još uvek niste našli šta tražite? Ostavite komentar za tekst ili nas kontaktirajte, pa ćemo probati da sredimo to!