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.

  • ๐Ÿ”Œ povezivanje: mysqli_connect otvara vezu do MySQL posluลพitelj, a mysqli_select_db odabire bazu podataka s kojom ฤ‡e raditi.
  • ๐Ÿ—ƒ๏ธ Izvoฤ‘enje upita: mysqli_query izvrลกava naredbe INSERT, SELECT, UPDATE i DELETE nad odabranom bazom podataka.
  • ๐Ÿ“„ Rezultati ฤitanja: mysqli_num_rows broji vraฤ‡ene retke, a mysqli_fetch_array ฤita svaki redak u niz za izlaz.
  • ๐Ÿ”„ ZDRAVO Operaticije: Zajedno, ove funkcije stvaraju, ฤitaju, aลพuriraju i briลกu zapise, ฤetiri osnovne operacije baze podataka.
  • ๐Ÿ›ก๏ธ Pripremljene izjave: Povezivanje vrijednosti s pripremljenim naredbama zaustavlja SQL injekciju, za razliku od izgradnje upita spajanjem korisniฤkog unosa.
  • ๐Ÿงฉ PDO i ODBC: PDO nudi jedno suฤelje za mnoge mehanizme baza podataka, dok se ODBC povezuje s izvorima kao ลกto su Microsoft Pristup.
  • ๐Ÿค– AI pomoฤ‡: AI alati mogu pretvoriti naslijeฤ‘eni mysqli kod u PDO s pripremljenim izjavama i otklanjati pogreลกke u povezivanju.

PHP MySQL Pristup bazi podataka

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.

PHP: MySQL Funkcije

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

Pitanja i odgovori

mysqli radi samo sa MySQL i nudi proceduralne i objektne stilove. PDO radi s mnogim bazama podataka putem jednog suฤelja i podrลพava imenovane rezervirane mjesta. Oba podrลพavaju pripremljene naredbe; PDO je prenosiviji izmeฤ‘u traลพilica.

Ne. Izvorna ekstenzija mysql_* uklonjena je u PHP 7. Umjesto nje koristite mysqli ili PDO. Oba se aktivno odrลพavaju, podrลพavaju pripremljene naredbe i ลกtite od rizika ubrizgavanja stare ekstenzije.

Uhvati greลกku i prikaลพi korisniku generiฤku poruku dok privatno zapisujeลก detalje. Ne ลกalji izlaz mysqli_error posjetiteljima, jer moลพe otkriti nazive tablica i strukturu korisnu napadaฤu.

Da. Zalijepite mysqli skriptu, a umjetna inteligencija je moลพe prepisati pomoฤ‡u PDO-a, zamijeniti spojene upite vezanim parametrima i dodati try-catch obradu pogreลกaka. Revpogledajte rezervirana mjesta i nakon toga testirajte svaki upit.

Da. Podijelite greลกku i svoj kod za povezivanje, a umjetna inteligencija moลพe uoฤiti pogreลกne vjerodajnice, loลก host ili port, nedostajuฤ‡u bazu podataka ili onemoguฤ‡eni upravljaฤki program, a zatim predloลพiti ispravljene postavke koje treba isprobati.

Saลพmite ovu objavu uz: