Zadavanje MySQL upita iz PHP-a

Jednom kada uspostavimo konekciju i izaberemo bazu, možemo zadavati upite MySQL bazi podataka.

Funkcija Značenje
mysql_query(zahtev, link) Upućuje zahtev bazi podataka
mysql_affected_rows(link) Broj redova u tabeli nad kojima je izvršena promena

mysql_query()

Zahtev se zadaje u obliku stringa. Drugim rečima, ono što bismo zadali MySQL bazi, prosto navodimo kao tekst u PHP-u. Osnovna komanda, od koje "sve kreće" je funkcija mysql_query(). Ova funkcija ima dva parametra, sam zahtev i link prema serveru. Samo je zahtev obavezan, dok ako se link ne navede, koristiće se poslednja uspostavljena konekcija.

mysql_query(zahtev)

Suštinski postoje dve vrste upita - oni koji se samo upute bazi (npr. INSERT ili UPDATE upit) i oni koji vraćaju rezultat (npr. SELECT upit).

Ako se kao zahtev zada upit koji ne vraća rezultat, onda je ova funkcija više-manje sve što nam treba. U tom slučaju kao rezultat vraća logičku vrednost, koja će biti true ako je upit uspeo, odnosno false ako nije.

mysql_affected_rows()

Eventualno možemo da iščitamo na koliko redova tabele je uticao zadati upit, korišćenjem funkcije mysql_affected_rows(). Ova funkcija kao parametar ima link prema serveru, koji nije obavezan i ako se ne navede koristi se poslednja otvorena veza.

mysql_affected_rows()

Kao rezultat dobijamo numeričku vrednost. Ovaj broj ima neke specifičnosti:

Primer zadavanja upita

Počećemo sa najjednostavnijim primerom, bez provere uspeha:


	$zahtev = "INSERT INTO knjige(sifra, naslov, stranice, zanr, pisac)
    VALUES ('0001', 'Isijavanje', 390, 'HOR', 'P02')";
	mysql_query($zahtev);

Kao što vidimo, prosto smo naveli SQL upit kao string i onda zadali taj string funkciji mysql_query(). U sledećem primeru ćemo uraditi sve to malo "kulturnije":


	$zahtev = "UPDATE komponente SET prodajna = nabavna * 1.2";

	if (mysql_query($zahtev)) {
	  echo "Izvršena je promena " . mysql_affected_rows() . " redova";
	}
	else {
	  echo "Zahtev nije izvršen";
	}

Dakle, sada ispitujemo da li je mysql_query() funkcija vratila TRUE ili FALSE. Ako je upit uspeo, ispisaćemo i nad koliko redova je izvršena izmena. U suprotnom, dobićemo poruku o neuspehu.

Naravno, ovakvi upiti nam ne znače puno. Idealno bi bilo kada bi korisnik mogao da zada podatke koji će se unositi u bazu. Uobičajen način je korišćenjem GET odnosno POST metoda.

U tekstovima vezanim za HTML smo se već upoznali sa formama, a u ovoj sekciji smo takođe obradili kako se PHP snalazi sa takvim podacima koji mu stižu preko GET/POST metoda. Sve što je ostalo je da te podatke ubacimo u naš zahtev.

Primer sa korisničkim parametrima

Evo kako bismo izvršili unos podataka u bazu na osnovu korisničkih parametara dobijenih putem GET metode:


	$zahtev = "INSERT INTO knjige(sifra, naslov, stranice, zanr, pisac)
    VALUES ('{$_GET["sif"]}', '{$_GET["nas"]}', {$_GET["str"]}, '{$_GET["zanr"]}', '{$_GET["pis"]}')";
    
	mysql_query($zahtev);

U suštini, ništa se ne menja, samo smo zahtev sklopili pomoću GET vrednosti. Svuda gde su bile konkretne vrednosti uneli smo jednu vrednost iz GET niza. Primetićete da smo obavezno koristili vitičaste zagrade kako bismo u string "ubacili" odgovarajući element niza $_GET.

Na potpuno istom principu rade svi upiti. Evo još par primera:


  // promena podatka u bazi
  
	$zahtev = "UPDATE komponente
    SET tip='{$_GET["tip"]}', naziv='{$_GET["naz"]}'
    WHERE id='{$_GET["ident"]}'";

	if (!mysql_query($zahtev)) {
	  echo "Promena nije izvršena.";
	}

  // brisanje podatka iz baze

	$zahtev = "DELETE FROM komponente WHERE id='{$_GET["ident"]}'";
	
	$rez = mysql_query($zahtev);
	if (!$rez) {
		echo "Neuspelo brisanje podatka '{$_GET["ident"]}'.";
	}
Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.