Za dohvaćanje podataka iz baze podataka koristi se tip upita SELECT, a njegovo izvršavanje se obavlja pozivom funkcije mysql_query.
Ova funkcija kao argument prima tekst SQL naredbe. U slučaju uspješnog izvršavanja upita, funkcija vraća identifikator rezultata upita, a u slučaju neuspješnog izvršavanja upita logičku vrijednost FALSE.
Budući da SELECT upiti najčešće vraćaju više redaka, najbolji način za dohvaćanje podataka je čitanje jednog po jednog retka unutar petlje za što služi funkcija mysql_fetch_array kojoj se kao argument predaje dobiveni identifikator rezultata
<?php
$rezultat = mysql_query("SELECT * FROM kontakti");
while ($redak = mysql_fetch_array($rezultat)){
echo "$redak['Ime'] $redak['Adresa']"
echo "$redak['Grad'] $redak['Email'] <br/>";
}
?>
Funkcija mysql_fetch_array svakim uzastopnim pozivom vraća sljedeći redak iz rezultata, a kad dođe do kraja, vraća false, te se prestaje s izvršavanjem petlje.
Vrijednostima pojedinih atributa unutar retka može se pristupiti pomoću njihovih naziva (npr. $redak["Ime"]) jer je varijabla $redak zapravo asocijativno polje.
Da bi gornji upit bio uspješno obavljen, potrebno je prije pozivanje funkcije mysql_query obaviti spajanje s bazom podataka, kao što je objašnjeno u prethodnom potpoglavlju, a odmah nakon prestanka čitanja iz baze podataka (nakon izlaska iz petlje) poželjno je zatvoriti vezu s bazom podataka.
Kod SELECT upita može se, pomoću funkcije mysql_num_rows, saznati broj redaka koji zadovoljavaju upit. Ovoj funkciji kao atribut treba predati identifikator rezultata upita.
Dobra praksa je osloboditi memoriju zauzetu dohvaćenim podacima (pogotovo ako dohvaćamo veću količinu podataka) čim smo završili s njihovom obradom. Na taj način, slično kao kod zatvaranja veze, oslobađamo resurse poslužitelja za posluživanje drugih korisnika.
To se obavlja pozivom funkcije mysql_free_result kojoj također predajemo identifikator rezultata.
Evo kako izgleda dohvaćanje podataka uporabom ove dvije funkcije:
<?php
$rezultat = mysql_query("SELECT * FROM kontakti");
while ($redak = mysql_fetch_array($rezultat)){
echo "$redak['Ime'] $redak['Adresa']";
echo "$redak['Grad'] $redak['Email'] <br/>";
}
echo "Dohvaćeno " . mysql_num_rows($rezultat) . " redaka";
mysql_free_result($rezultat);
?>
Za ispis podatka koji zadovoljava neki uvjet bit će dovoljno SQL upitu dodati uvjet WHERE.
Ako očekujemo da rezultat upita bude samo jedan redak, umjesto funkcije mysql_fetch_array može se koristiti funkcija mysql_fetch_row kojoj se također, kao argument, predaje dobiveni identifikator rezultata.
Ako se koristi ta funkcija, rezultat nije asocijativno polje, već se pojedinim poljima u retku mora pristupiti preko njihovog indeksa.
Dohvaćanje retka koji zadovoljava uvjet da mu je polje Id jednako određenoj vrijednosti izgledat će kao u ovom primjeru:
<?php
$rezultat = mysql_query("SELECT * FROM kontakti WHERE Id = 1");
if ($redak = mysql_fetch_row($rezultat)){
echo "Pronađen je ovaj kontakt: ";
echo "$redak[1] $redak[2] $redak[3]";
}
mysql_free_result($rezultat);
?>
Da bi se korisniku podaci prikazali u istom obliku u kojem ih je upisao prilikom ispisa podataka iz baze, koristi se funkcija stripSlashes koja miče dodane znakove .
<?php
$rezultat = mysql_query("SELECT ime FROM kontakti");
while ($redak = mysql_fetch_array($rezultat)) {
echo "Ime: " . stripSlashes($redak['ime']) . "<br />";
}
?>
Upisivanje podatka u bazu podataka vrši se pomoću INSERT upita koji se također izvršava pomoću funkcije mysql_query.
Izvršavanje upita koji će ubaciti novi redak u tablicu kontakti izgledat će ovako:
<?php
$sql = "INSERT INTO kontakti (Id, Ime, Adresa, Grad, Email, Spol, Prijatelj) VALUES ( 2, 'Petar Lovrić', 'Savska 41', 2, 'petarlovric@kadus.hr', 'M', 'Da')";
mysql_query($sql);
?>
Za provjeru uspješnosti upita, može se dodati provjera vrijednosti koju vraća funkcija mysql_query.
Najčešći uzrok neuspjeha upita bit će pogrešno napisana SQL naredba.
<?php
if (mysql_query($sql)){
echo "Redak je dodan.";
}
else{
echo "Upit nije uspješno obavljen!";
}
?>
Znakovi kao što su , ', " i još neki mogu izazvati grešku u SQL upitu, zbog njihovog posebnog značenja u jeziku SQL.
Ovi se znakovi mogu naći u upitu ako ih korisnik preda zajedno s ulaznim podacima. Moguće je da korisnik pokuša upisati ime koje sadrži apostrof (npr. O'Brien).
Također njihovom manipulacijom može se izmijeniti upit pa je moguće da ih zlonamjerni korisnik upiše u pokušaju da izbriše postojeće podatke ili da dođe do podataka koje ne bi smio vidjeti.
Zbog toga je preporučljivo ukloniti te znakove iz svih podataka koji se upisuju u bazu, a upisao ih je korisnik ili su pročitani iz URL-a.
Za uklanjanje (točnije, neutralizaciju) ovih znakova koristi se funkcija addSlashes, koja ispred svakog takvog znaka dodaje znak , čime se gubi specijalno značenje koje dani znak ima u jeziku SQL.
Funkcija addSlashes koristi se prilikom zapisivanja u bazu:
<?php
$ime = addSlashes($_POST["ime"]);
mysql_query("UPDATE kontakti SET ime = $ime WHERE Id = 2");
?>
Promjena podataka u bazi podataka postiže se pomoću UPDATE upita. Za izvršavanje ove vrste upita također se koristi funkcija mysql_query.
Primjer izmjene nad određenim retkom u bazi slijedi:
<?php
mysql_query("UPDATE kontakti SET Spol = 'M' WHERE Id = 2");
?>
Za brisanje podataka iz baze podataka služe DELETE upiti koji se također izvršavaju pomoću funkcije mysql_query.
Primjer brisanja retka koji zadovoljava određeni uvjet izgledat će ovako:
<?php
mysql_query("DELETE from kontakti WHERE Id = 2");
?>