PHP MySQLFunkcije: mysqli_query i mysqli_connect
โก Pametni saลพetak
MySQL, PHP i druge metode pristupa bazi podataka omoguฤuju PHP skripti povezivanje s bazom podataka, pokretanje upita i ฤitanje rezultata. Ovaj vodiฤ pokriva osnovne mysqli funkcije, potpune CRUD primjere, pripremljene naredbe za sigurnost i alternativne PDO i ODBC metode pristupa.

PHP ima bogatu kolekciju ugraฤenih funkcija za manipulaciju MySQL baza podataka.
PHP mysqli_connect funkcija
PHP funkcija mysqli_connect se koristi za povezivanje s MySQL posluลพitelj baze podataka.
Ima sljedeฤu sintaksu.
<?php $db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password); ?>
OVDJE,
- โ$db_handleโ je varijabla resursa veze s bazom podataka.
- โmysqli_connect(โฆ)โ je funkcija za povezivanje s PHP bazom podataka
- โ$db_server_nameโ je naziv ili IP adresa posluลพitelja koji hostira MySQL posluลพitelj.
- โ$db_user_nameโ je valjano korisniฤko ime u MySQL posluลพitelj.
- โ$db_passwordโ je valjana lozinka povezana s korisniฤkim imenom u MySQL posluลพitelj.
PHP mysqli_select_db funkcija
Funkcija mysqli_select_db koristi se za odabir baze podataka.
Ima sljedeฤu sintaksu.
<?php mysqli_select_db($db_handle, $database_name); ?>
OVDJE,
- โmysqli_select_db(โฆ)โ je funkcija odabira baze podataka koja vraฤa true ili false
- โ$db_handleโ je veza za povezivanje s posluลพiteljem
- โ$database_nameโ je naziv baze podataka
PHP mysqli_query funkcija
Za izvoฤenje se koristi funkcija mysqli_query SQL upita.
Funkcija se moลพe koristiti za izvrลกavanje sljedeฤih tipova upita:
- umetak
- odabrati
- Nadopune
- Izbrisati
Ima sljedeฤu sintaksu.
<?php mysqli_query($db_handle, $query); ?>
OVDJE,
- โmysqli_query(โฆ)โ je funkcija koja izvrลกava SQL upite.
- โ$db_handleโ je veza za povezivanje s posluลพiteljem
- โ$queryโ je SQL upit koji treba izvrลกiti
PHP mysqli_num_rows funkcija
Funkcija mysqli_num_rows koristi se za dobivanje broja redaka vraฤenih iz upita odabira.
Ima sljedeฤu sintaksu.
<?php mysqli_num_rows($result); ?>
OVDJE,
- โmysqli_num_rows(โฆ)โ je funkcija brojanja redaka
- โ$resultโ je skup rezultata mysqli_query
PHP mysqli_fetch_array funkcija
Funkcija mysqli_fetch_array koristi se za dohvaฤanje nizova redaka iz skupa rezultata upita.
Ima sljedeฤu sintaksu.
<?php mysqli_fetch_array($result); ?>
OVDJE,
- โmysqli_fetch_array(โฆ)โ je funkcija za dohvaฤanje nizova redaka
- โ$resultโ je rezultat koji vraฤa funkcija mysqli_query.
PHP mysqli_close funkcija
Funkcija mysqli_close koristi se za zatvaranje otvorene veze s bazom podataka.
Ima sljedeฤu sintaksu.
<?php mysqli_close($db_handle); ?>
OVDJE,
- โmysqli_close(โฆ)โ je PHP funkcija koja zatvara vezu
- โ$db_handleโ je resurs za povezivanje s posluลพiteljem
PHP MySQL Primjeri CRUD-a
Pogledajmo praktiฤne primjere koji koriste ove funkcije. Ovaj vodiฤ pretpostavlja poznavanje MySQL i SQL; ako vam ovi pojmovi nisu poznati, pogledajte naลกe MySQL i SQL vodiฤi.
Napravit ฤemo jednostavnu bazu podataka pod nazivom my_personal_contacts s โโsamo jednom tablicom. Poveลพite se s MySQL pomoฤu vaลกeg omiljenog alata za pristup kao ลกto je MySQL Workbench ili phpMyAdmin, stvorite bazu podataka pod nazivom my_personal_contacts, a zatim izvrลกite skriptu prikazanu u nastavku kako biste stvorili tablicu i umetnuli neke laลพne podatke.
CREATE TABLE IF NOT EXISTS `my_contacts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(255) NOT NULL, `gender` varchar(6) NOT NULL, `contact_no` varchar(75) NOT NULL, `email` varchar(255) NOT NULL, `city` varchar(255) NOT NULL, `country` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `my_contacts` (`id`, `full_names`, `gender`, `contact_no`, `email`, `city`, `country`) VALUES (1, 'Zeus', 'Male', '111', 'zeus@olympus.mt.co', 'Agos', 'Greece'), (2, 'Anthena', 'Female', '123', 'anthena@olympus.mt.co', 'Athens', 'Greece'), (3, 'Jupiter', 'Male', '783', 'jupiter@planet.pt.co', 'Rome', 'Italy'), (4, 'Venus', 'Female', '987', 'venus@planet.pt.co', 'Mars', 'Italy');
ฤitanje zapisa iz baze podataka
Sada ฤemo napraviti program koji ispisuje zapise iz baze podataka.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "SELECT * FROM my_contacts"; // SQL select query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Database access failed: " . mysqli_error($dbh)); $rows = mysqli_num_rows($result); // get number of rows returned if ($rows) { while ($row = mysqli_fetch_array($result)) { echo 'ID: ' . $row['id'] . '<br>'; echo 'Full Names: ' . $row['full_names'] . '<br>'; echo 'Gender: ' . $row['gender'] . '<br>'; echo 'Contact No: ' . $row['contact_no'] . '<br>'; echo 'Email: ' . $row['email'] . '<br>'; echo 'City: ' . $row['city'] . '<br>'; echo 'Country: ' . $row['country'] . '<br><br>'; } } mysqli_close($dbh); // close the database connection ?>
Izvrลกavanje gornjeg koda vraฤa rezultate prikazane na dijagramu ispod.
Umetanje novih zapisa
Pogledajmo sada primjer koji dodaje novi zapis u naลกu tablicu. Donji kod prikazuje implementaciju.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "INSERT INTO `my_contacts` (`full_names`,`gender`,`contact_no`,`email`,`city`,`country`)"; $sql_stmt .= " VALUES(7,8,9,10,11,12)"; $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Adding record failed: " . mysqli_error($dbh)); echo "Poseidon has been successfully added to your contacts list"; mysqli_close($dbh); // close the database connection ?>
Izvrลกavanje gornjeg koda ispisuje "Posejdon je uspjeลกno dodan na vaลก popis kontakata". Vratite se na primjer upita za odabir i ponovno dohvatite svoje kontakte kako biste vidjeli je li Posejdon dodan na vaลก popis.
Aลพuriranje zapisa
Pogledajmo sada primjer koji aลพurira zapis u bazi podataka. Pretpostavimo da je Posejdon promijenio svoj kontaktni broj i adresu e-poลกte.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $sql_stmt = "UPDATE `my_contacts` SET `contact_no` = 8, `email` = 9"; $sql_stmt .= " WHERE `id` = 5"; // SQL update query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Updating record failed: " . mysqli_error($dbh)); echo "ID number 5 has been successfully updated"; mysqli_close($dbh); // close the database connection ?>
Brisanje zapisa
Pogledajmo sada primjer koji uklanja zapise iz baze podataka. Pretpostavimo da Venus ima zabranu pristupa protiv nas i moramo ukloniti njezine kontakt podatke iz naลกe baza podataka.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); // connect to MySQL server if (!$dbh) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($dbh, 'my_personal_contacts')) die("Unable to select database: " . mysqli_error($dbh)); $id = 4; // Venus's ID in the database $sql_stmt = "DELETE FROM `my_contacts` WHERE `id` = $id"; // SQL delete query $result = mysqli_query($dbh, $sql_stmt); // execute SQL statement if (!$result) die("Deleting record failed: " . mysqli_error($dbh)); echo "ID number $id has been successfully deleted"; mysqli_close($dbh); // close the database connection ?>
Sprjeฤavanje SQL injekcije s pripremljenim naredbama
Gornji CRUD primjeri grade upite spajanjem nizova. Kada bilo koji dio upita dolazi od korisniฤkog unosa, to otvara vrata SQL injekciji. Pripremljeni izrazi rjeลกavaju ovaj problem slanjem upita i podataka odvojeno, tako da unos nikada ne moลพe promijeniti strukturu upita.
<?php $dbh = mysqli_connect('localhost', 'root', 'melody'); $stmt = mysqli_prepare($dbh, "INSERT INTO my_contacts (full_names, email) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $name, $email); $name = 'Poseidon'; $email = 'poseidon@sea.oc'; mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($dbh); ?>
Ovdje su upitnici rezervirana mjesta, a bind_param sigurno veลพe vrijednosti imena i e-poลกte. Baza podataka ih tretira iskljuฤivo kao podatke, zbog ฤega su pripremljene naredbe, dostupne i u mysqli-ju i u PDO-u, preporuฤeni naฤin za pokretanje bilo kojeg upita koji koristi korisniฤki unos.
PHP objekt za pristup podacima (PDO)
PDO je klasa koja nam omoguฤuje manipuliranje razliฤitim mehanizmima baza podataka kao ลกto su MySQL, PostgreSQLi MS SQL Server koristeฤi isto suฤelje.
Kod u nastavku prikazuje metodu pristupa bazi podataka pomoฤu PDO objekta.
Napomena: donji kod pretpostavlja poznavanje SQL jezika, nizova, rukovanja iznimkama i petlje foreach.
<?php try { $pdo = new PDO("mysql:host=localhost;dbname=my_personal_contacts", 'root', 'melody'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES "utf8"'); $sql_stmt = "SELECT * FROM `my_contacts`"; $result = $pdo->query($sql_stmt); $result->setFetchMode(PDO::FETCH_ASSOC); $data = array(); foreach ($result as $row) { $data[] = $row; } print_r($data); } catch (PDOException $e) { echo $e->getMessage(); } ?>
OVDJE,
- โtry{โฆ}catch{โฆ}โ je blok za obradu iznimki
- โ$pdo = new PDO(โmysqlโฆโ stvara instancu PDO objekta i prosljeฤuje nazive upravljaฤkog programa baze podataka, posluลพitelja i baze podataka, korisniฤki ID i lozinku.โ
- โ$pdo->setAttributeโฆโ postavlja PDO naฤin pogreลกke za izbacivanje iznimki
- โ$pdo->exec('SET NAMESโฆ' postavlja format kodiranja
PHP ODBC pristup podacima
ODBC je kratica za Open Database Connectivity. Ima sljedeฤu osnovnu sintaksu.
<?php $conn = odbc_connect($dsn, $user_name, $password); ?>
OVDJE,
- โodbc_connectโ je ugraฤena PHP funkcija
- โ$dsnโ je naziv ODBC izvora podataka.
- โ$user_nameโ je opcionalno i koristi se za ODBC korisniฤko ime
- "$password" je opcionalan i koristi se za ODBC lozinku
U donjem primjeru pretpostavlja se da koristite Windows i stvorili su ODBC vezu s Northwindom Microsoft Accessova baza podataka pod nazivom northwind.
<?php $dbh = odbc_connect('northwind', '', ''); if (!$dbh) { exit("Connection Failed: " . $dbh); } $sql_stmt = "SELECT * FROM customers"; $result = odbc_exec($dbh, $sql_stmt); if (!$result) { exit("Error accessing records"); } while (odbc_fetch_row($result)) { $company_name = odbc_result($result, "CompanyName"); $contact_name = odbc_result($result, "ContactName"); echo "<b>Company Name (Contact Person):</b> $company_name ($contact_name) <br>"; } odbc_close($dbh); ?>

