05/06.02.- pristup MySQL serveru, kreiranje baze i tabele, ....
Povezivanje na MySQL pomoću PHP-a
Da biste u MySQL bazu podataka upisali bilo kakve podatke, prvo se morate povezati sa MySQL serverom baze podataka.
PHP nudi dva različita načina povezivanja sa MySQL serverom:
- MySQLi (poboljšani MySQL)
- procediralni pristup (stariji)
- objektno orijentisani pristup (noviji)
- PDO (PHP podaci objekti) ekstenzije.
Mi ćemo zasad koristiti MySQLi i to objektno orijentisani način
Sintaksa:
$mysqli = new mysqli("hostname", "username", "password", "database");
hostname: ime hosta (npr. localhost) ili IP adresa MySQL servera,
username i password: korisničko ime i šifra za pristup MySQL serveru,
database: ne mora da se navodi ako se samo pristupa serveru, ali ako je navedeno onda je to zadata MySQL baza podataka koja će se koristiti prilikom izvršenja upita.
Sledeći primer pokazuje kako se povezuje sa MySQL serverom baze podataka korišćenjem MySQLi (objektni pristup):
<?php
/* Pokušaj povezivanja na MySQL server.
Pod pretpostavkom da koristite MySQL server sa predefinisanim postavkama (korisnik 'root' bez lozinke) */
$veza = new mysqli("localhost", "root", "", "world");
// Provera konekcije
if($veza === false){
die("GRESKA: Povezivanje nije uspelo. " . $veza->connect_error);
}
// Ispis informacija o hostu
echo "Povezivanje je uspelo. Info o hostu: " . $veza->host_info;
?>
Zatvaranje MySQL baze podataka Server Connection
Veza sa MySQL serverom baze podataka automatski će se zatvoriti čim završi izvršavanje skripte.
Međutim, ako želite da vezu zatvorite ranije, to možete učiniti jednostavnim pozivom PHP funkcije close():
<?php
$veza = new mysqli("localhost", "root", "", "world");
// Provera konekcije
if($veza === false){
die("GRESKA: Povezivanje nije uspelo. " . $veza->connect_error);
}
// Ispis informacija o hostu
echo "Povezivanje je uspelo. Info o hostu: " . $veza->host_info;
// Zatvaranje konekcije
$veza->close();
?>
Kreiranje MySQL baze podataka pomoću PHP-a
Prvo treba kreirati bazu podataka: treba vam SQL upit pomoću izraza CREATE DATABASE.
Nakon toga ćemo izvršiti ovaj SQL upit na taj način što ćemo ga proslediti PHP funkciji query() kojom se kreira naša bazu podataka.
Sledeći primeri kreiraju:
1grupa. Bazu podataka koja se zove slonovi : (klik za prikaz/sakrivanje)
<?php
/* Pokušaj povezivanja na MySQL server.
Pod pretpostavkom da se koristi MySQL server sa predefinisanim postavkama (korisnik 'root' bez lozinke) */
$veza = new mysqli("localhost", "root", "");
// Provera konekcije
if($veza === false){
die("GRESKA: Povezivanje nije uspelo. " . $veza->connect_error);
}
// Pokušaj kreiranja baze podataka
$upit = "CREATE DATABASE slonovi";
if($veza->query($upit) === true){
echo "Baza podataka uspešno kreirana";
} else{
echo "GRESKA: Nije moguće izvršiti $upit. " . $veza->error;
}
// Zatvaranje konekcije
$veza->close();
?>
2grupa. Bazu podataka koja se zove torte: (klik za prikaz/sakrivanje)
<?php
/* Pokušaj povezivanja na MySQL server.
Pod pretpostavkom da se koristi MySQL server sa predefinisanim postavkama (korisnik 'root' bez lozinke) */
$veza = new mysqli("localhost", "root", "");
// Provera konekcije
if($veza === false){
die("GRESKA: Povezivanje nije uspelo. " . $veza->connect_error);
}
// Pokušaj kreiranja baze podataka
$upit = "CREATE DATABASE torte";
if($veza->query($upit) === true){
echo "Baza podataka uspešno kreirana";
} else{
echo "GRESKA: Nije moguće izvršiti $upit. " . $veza->error;
}
// Zatvaranje konekcije
$veza->close();
?>
...
Kreiranje tabele unutar MySQL baze podataka pomoću PHP-a
Izraz SQL CREATE TABLE koristi se za kreiranje tabele u bazi podataka.
Na sličan način kao u prethodnom primeru, kreiraćemo SQL upit pomoću izraza CREATE TABLE.
Nakon toga ćemo da izvršimo ovaj SQL upit tako što ćemo ga proslediti PHP funkciji query():
1. grupa: kreirati tabelu mladunci (id, ime, godiste ) - prikaži / sakrij kôd -
<?php
/* Pokušavanje povezivanja na MySQL server. */
$veza = new mysqli("localhost", "root", "", "slonovi");
// Provera konekcije
if($veza === false){
die("ERROR: Povezivanje nije uspelo " . $mysqli->connect_error);
}
$upit = "CREATE TABLE mladunci(
id INT PRIMARY KEY AUTO_INCREMENT,
ime VARCHAR(30) NOT NULL,
godiste INT
)";
if($veza->query($upit) === true){
echo "Tabela je uspešno kreirana.";
} else{
echo "ERROR: Nije moguće izvršiti $upit : " . $veza->error;
}
// Zatvaranje konekcije
$veza->close();
?>
2. grupa: kreirati tabelu tortice (id, naziv, tezina) - prikaži / sakrij kôd -
<?php
/* Pokušavanje povezivanja na MySQL server. */
$veza = new mysqli("localhost", "root", "", "torte");
// Provera konekcije
if($veza === false){
die("ERROR: Povezivanje nije uspelo " . $mysqli->connect_error);
}
$upit = "CREATE TABLE tortice(
id INT PRIMARY KEY AUTO_INCREMENT,
naziv VARCHAR(30) NOT NULL,
tezina INT
)";
if($veza->query($upit) === true){
echo "Tabela je uspešno kreirana.";
} else{
echo "ERROR: Nije moguće izvršiti $upit : " . $veza->error;
}
// Zatvaranje konekcije
$veza->close();
?>
Unos podataka u tabelu:
Ubaciti odgovarajući upit za unos podataka (i odgovarajuću poruku ako se desi greška)
1.grupa -> $upit = "INSERT INTO mladunci (ime, godiste) VALUES ('Pera', 2021)";
2.grupa -> $upit = "INSERT INTO tortice (naziv, tezina) VALUES ('Japanski vetar', 1600)";
Unos više redova podataka u tabelu:
Ubaciti odgovarajući upit za unos podataka (i odgovarajuću poruku ako se desi greška)
1.grupa ->
$upit = "INSERT INTO mladunci (ime, godiste) VALUES
('Sima', 1999),
('Aca', 2003),
('Marko', 1903)";
2.grupa ->
$upit = "INSERT INTO tortice (naziv, tezina) VALUES
('Markiza', 1200),
('Schwarzwald', 900)";
Ubacivanje podataka u bazu podataka iz HTML FORME:
Za početak, promenite naziv prethodnog fajla (index.php neka se sada zove index1.php) jer sa nastavlja rad u istom folderu i u VS Code.
Kreirati dva fajla: index.html i insert.php
Prvi korak je da se kreira HTML fajl u kojem se nalazi forma za unos podataka .
U index.html ubacite osnovni html kod (koristite šablon ! za brži rad):
U <body> delu treba ubaciti formu sa dva input polja za unos podataka i submit dugme
U nastavku je za obe grupe postavljen deo HTML koda u kojem se nalaze dva tekstualna <input> polja i dugme za slanje podataka.
prikaži / sakrij kôd za PRVU grupu
<form action="insert.php" method="post">
<form action="insert.php" method="post">
Drugi korak je da se preuzmu podaci iz forme i ubace u bazu podataka
Kada korisnik klikne na dugme za slanje u HTML formi, u našem primeru se podaci iz forme šalju u fajl insert.php. Ovaj fajl se povezuje sa MySQL sistemom za upravljanje bazom podataka, preuzima iz forme podatke pomoću PHP promenljive $_REQUEST i na kraju izvršava upit za unošenje podataka.
Drugim rečima, u insert.php se šalju podaci koje korisnik upisuje u input polja i ti podaci se trebaju upisati u bazu podataka, na sličan način kao što je dosad rađeno
U nastavku je kompletan koda naše datoteke insert.php:
prikaži / sakrij insert.php za PRVU grupu
prikaži / sakrij insert.php za DRUGU grupu
...
*******************************************
Nastavak:
Dodfati jednu crvenu liniju i ispod nje formu u kojoj se traži da se ispišu sve baze koje se nalaze na našem web serveru
Povezivanje uraditi u posebnom fajlu
*******************************************
- kreirati novi fajl, povezivanje.php, u kojem se vrši povezivanje na lokalni web server i na njemu na MySQL server. Ako je veza uspešna ispisaće se odgovarajuća poruka, a ako ne uspe, treba da se ispiše u čemu je problem
<a href="index.html">Povratak na početnu stranicu</a><br>
<?php
$veza = new mysqli("localhost","root","");
if($veza->connect_error)
{
die("Ne mogu povezati server.<br>Greska: ".$veza->connect_error);
}
else
{
echo "<br>Veza uspostavljena<br>";
}
?>
Prikaz kojih sve baza imamo na serveru:
- Dodajemo formu u kojoj se traži prikaz spiska svih baza koje imamo na MySQL serveru
<hr color="red">
<form action="sveBaze.php">
<h3>Koje baze imamo</h3>
<br>
<button type="submit">Prikaži SVE baze</button>
</form>
- Zatim kreiramo fajl sveBaze.php
<?php
require_once("povezivanje.php");
if($rezultat = $veza->query("SHOW DATABASES"))
{
while($red = $rezultat->fetch_array())
{
print_r($red[0]);
echo "<br>";
}
}
else
{
echo "<br> Nešto ne valja <br> Razlog: ".$veza->error;
}
?>
Dodatna objašnjenja:
Ovde je ponovo upotrebljen php fajl za povezivanje na server baza podataka. Potrebno je samo jednom, pa je zato upotrebljena verzija reqire_once ...
Upit se izvršava sa
$veza->query("SHOW DATABASES")
Pošto ovaj upit vraća neke podatke, rezultat upita smeštamo u promenljuvu $rezultat. $rezultat = $veza->query("SHOW DATABASES")
Ako sve to stavimo u if, ..., tada ako se sve to izvrši ok biće izvršeno ono što je unutar bloka naredbi kada je uslov ispunjen.if($rezultat = $veza->query($upit))U else bloku će biti ono što se izvršava ako upit ne može da se izvrši. Najčešća greška je greška u pisanju ispravnog upita. Zato pažnja molim!
{ // ovo se radi ako se uspeđno izvrši upit i rezultat smesti u navedenu promenljivu
}
else { // ovo se radi ako nije uspeo upit
}
$rezultat->fetch_array())Pošto nam treba da čitamo redove iz rezultata dokle god ima šta da se pročita (da bi pročitali sve redove), koristi se sekvenca:
while($red = $rezultat->fetch_array())Prikazivanje vrednosti prvog elementa u svakom redu može da se vrši ili ovako, ali može i pomoću echo naredbe koju smo do sada koristili:
{
print_r($red[0]);
echo "<br>";
}
while($red = $rezultat->fetch_array())U ovom primeru je svejedno šta se koristi. Izbor je na vama.
{
echo $red[0]."<br>";
}