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); ?>


