PHP MySQLFüggvények: mysqli_query és mysqli_connect

⚡ Okos összefoglaló

MySQLA , a PHP és más adatbázis-hozzáférési metódusok lehetővé teszik egy PHP szkript számára, hogy csatlakozzon egy adatbázishoz, lekérdezéseket futtasson és eredményeket olvasson. Ez az útmutató bemutatja a MySQL alapvető függvényeit, a teljes CRUD példákat, az előkészített biztonsági utasításokat, valamint az alternatív PDO és ODBC hozzáférési metódusokat.

  • 🔌 Csatlakozó: A mysqli_connect megnyit egy linket a következőhöz: MySQL szerver, és a mysqli_select_db választja ki az adatbázist, amellyel dolgozni szeretne.
  • 🗃️ Futó lekérdezések: A mysqli_query INSERT, SELECT, UPDATE és DELETE utasításokat hajt végre a kiválasztott adatbázison.
  • 📄 Olvasási eredmények: A mysqli_num_rows függvény megszámolja a visszaadott sorokat, a mysqli_fetch_array pedig minden sort egy tömbbe olvas be kimenetként.
  • 🔄 szifilisz Operafeltételek: Ezek a függvények együttesen rekordokat hoznak létre, olvasnak, frissítenek és törölnek, ami a négy alapvető adatbázis-művelet.
  • 🛡️ Elkészített kimutatások: Az előkészített utasításokkal kötött értékek leállítják az SQL-befecskendezést, ellentétben a felhasználói bemenet összefűzésével létrehozott lekérdezésekkel.
  • 🧩 PDO és ODBC: A PDO egyetlen felületet kínál számos adatbázismotorhoz, míg az ODBC olyan forrásokhoz kapcsolódik, mint például Microsoft Hozzáférés.
  • 🤖 AI Assist: A mesterséges intelligencia eszközei előkészített utasításokkal képesek a régi mysqli kódot PDO-vá alakítani, és hibakeresni a kapcsolati hibákat.

PHP MySQL Adatbázis-hozzáférés

A PHP gazdag beépített függvénygyűjteményt tartalmaz a manipuláláshoz MySQL adatbázisok.

PHP mysqli_connect függvény

A PHP mysqli_connect függvénye egy olyan eszközhöz való csatlakozásra szolgál, MySQL adatbázis szerver.

A következő szintaxissal rendelkezik.

<?php
$db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password);
?>

ITT,

  • A „$db_handle” az adatbázis-kapcsolat erőforrás-változója.
  • A „mysqli_connect(…)” a PHP adatbázis-kapcsolathoz tartozó függvény.
  • A „$db_server_name” a szerver neve vagy IP-címe, amelyen a MySQL szervert.
  • A(z) „$db_user_name” egy érvényes felhasználónév a következőben: MySQL szervert.
  • A „$db_password” egy érvényes jelszó, amely egy felhasználónévhez van társítva a MySQL szervert.

PHP mysqli_select_db függvény

A mysqli_select_db függvény az adatbázis kiválasztására szolgál.

A következő szintaxissal rendelkezik.

<?php
mysqli_select_db($db_handle, $database_name);
?>

ITT,

  • A „mysqli_select_db(…)” az adatbázis-kiválasztó függvény, amely igaz vagy hamis értéket ad vissza
  • A „$db_handle” a szerverkapcsolat linkje.
  • „$adatbázis_neve” az adatbázis neve

PHP mysqli_query függvény

A mysqli_query függvény végrehajtására szolgál SQL lekérdezéseket.

A függvény a következő lekérdezéstípusok végrehajtására használható:

  • betétlap
  • választ
  • Frissítések
  • Törölni

A következő szintaxissal rendelkezik.

<?php
mysqli_query($db_handle, $query);
?>

ITT,

  • A „mysqli_query(…)” az SQL lekérdezéseket végrehajtó függvény.
  • A „$db_handle” a szerverkapcsolat linkje.
  • A „$query” a végrehajtandó SQL lekérdezés

PHP mysqli_num_rows függvény

A mysqli_num_rows függvény a kiválasztási lekérdezésből visszaadott sorok számának lekérésére szolgál.

A következő szintaxissal rendelkezik.

<?php
mysqli_num_rows($result);
?>

ITT,

  • A „mysqli_num_rows(…)” a sorszámláló függvény
  • A „$result” a mysqli_query eredménykészlete

PHP mysqli_fetch_array függvény

A mysqli_fetch_array függvény sortömbök lekérésére szolgál egy lekérdezési eredményhalmazból.

A következő szintaxissal rendelkezik.

<?php
mysqli_fetch_array($result);
?>

ITT,

  • A „mysqli_fetch_array(…)” a sortömbök lekérésének függvénye
  • A „$result” a mysqli_query függvény által visszaadott eredmény.

PHP mysqli_close függvény

A mysqli_close függvény egy nyitott adatbázis-kapcsolat bezárására szolgál.

A következő szintaxissal rendelkezik.

<?php
mysqli_close($db_handle);
?>

ITT,

  • A „mysqli_close(…)” a PHP függvény, amely lezárja a kapcsolatot.
  • A „$db_handle” a szerverkapcsolati erőforrás.

PHP MySQL CRUD példák

Nézzünk meg gyakorlati példákat, amelyek kihasználják ezeket a függvényeket. Ez az oktatóanyag feltételezi a következők ismeretét: MySQL és az SQL-t; ha ezek a kifejezések nem ismerősek az Ön számára, tekintse meg a következőt: MySQL és SQL oktatóanyagok.

Létrehozunk egy egyszerű adatbázist, melynek neve my_personal_contacts, és csak egy táblával rendelkezik. Kapcsolódjunk a következőhöz: MySQL kedvenc hozzáférési eszközével, mint pl MySQL A Workbench vagy a phpMyAdmin segítségével hozz létre egy my_personal_contacts nevű adatbázist, majd futtasd az alább látható szkriptet a tábla létrehozásához és néhány próbaadat beszúrásához.

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

Rekordok olvasása az adatbázisból

Most készítünk egy programot, amely kinyomtatja az adatbázisban található rekordokat.

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

A fenti kód végrehajtása az alábbi ábrán látható eredményeket adja vissza.

PHP: MySQL Funkciók

Új rekordok beszúrása

Most nézzünk egy példát, amely egy új rekordot ad hozzá a táblázatunkhoz. Az alábbi kód bemutatja a megvalósítást.

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

A fenti kód végrehajtása a következő kimenetet eredményezi: „A Poseidon sikeresen hozzáadva a névjegyek listájához”. Térjen vissza a választó lekérdezési példához, és kérje le újra a névjegyeket, hogy megtudja, felkerült-e a Poseidon a listára.

Rekordok frissítése

Most nézzünk egy példát, amely frissít egy rekordot az adatbázisban. Tegyük fel, hogy Poszeidón megváltoztatta a telefonszámát és az e-mail címét.

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

Rekordok törlése

Nézzünk most egy példát, amely rekordokat távolít el az adatbázisból. Tegyük fel, hogy Venus ellen távoltartási végzés van érvényben, és el kell távolítanunk az elérhetőségeit az adatbázisunkból. adatbázis.

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

SQL-befecskendezés megakadályozása előkészített utasításokkal

A fenti CRUD példák karakterláncok összefűzésével építik fel a lekérdezéseket. Amikor egy lekérdezés bármely része felhasználói bevitelből származik, az megnyitja az utat az SQL injektálás előtt. Az előkészített utasítások ezt úgy oldják meg, hogy a lekérdezést és az adatokat külön küldik el, így a bemenet soha nem változtathatja meg a lekérdezés struktúráját.

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

Itt a kérdőjelek helyőrzők, és a bind_param biztonságosan köti a név és az e-mail értékeket. Az adatbázis szigorúan adatként kezeli őket, ezért az előkészített utasítások, amelyek mind a mysqli-ben, mind a PDO-ban elérhetők, az ajánlott módja minden olyan lekérdezés futtatásának, amely felhasználói bevitelt használ.

PHP adathozzáférési objektum (PDO)

A PDO egy olyan osztály, amely lehetővé teszi számunkra, hogy különböző adatbázismotorokat manipuláljunk, mint például MySQL, PostgreSQLés az MS SQL Server ugyanazt a felületet használja.

Az alábbi kód az adatbázis-hozzáférési módot mutatja a PDO objektum használatával.

Megjegyzés: az alábbi kód feltételezi az SQL nyelv, a tömbök, a kivételkezelés és a foreach ciklus ismeretét.

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

ITT,

  • A „try{…}catch{…}” a kivételkezelő blokk.
  • A „$pdo = new PDO(“mysql…” függvény létrehozza a PDO objektum egy példányát, és átadja az adatbázis-illesztőprogramot, a kiszolgáló és az adatbázis nevét, a felhasználói azonosítót és a jelszót.
  • A „$pdo->setAttribute…” beállítás a PDO hibamódját állítja be kivételek dobására.
  • A „$pdo->exec('SET NAMES…” beállítja a kódolási formátumot

PHP ODBC adathozzáférés

Az ODBC az Open Database Connectivity (Nyílt Adatbázis-kapcsolat) rövidítése. Alapvető szintaxisa a következő.

<?php
$conn = odbc_connect($dsn, $user_name, $password);
?>

ITT,

  • Az „odbc_connect” a PHP beépített függvénye.
  • A „$dsn” az ODBC adatforrás neve.
  • A „$user_name” opcionális, és az ODBC felhasználónévhez használatos.
  • A „$password” opcionális, és az ODBC jelszóként használatos.

Az alábbi példa feltételezi, hogy a következőt használod: Windows és létrehoztak egy ODBC kapcsolatot az északi széllel Microsoft Northwind nevű Access-adatbázis.

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

GYIK

a mysqli csak a következővel működik: MySQL és procedurális, valamint objektumstílusokat is kínál. A PDO számos adatbázissal működik egyetlen felületen keresztül, és támogatja az elnevezett helyőrzőket. Mindkettő támogatja az előkészített utasításokat; a PDO könnyebben hordozható a különböző motorok között.

Nem. Az eredeti mysql_* kiterjesztés eltávolításra került a PHP 7-ben. Használj helyette mysqli-t vagy PDO-t. Mindkettő aktívan karbantartott, támogatja az előkészített utasításokat, és védelmet nyújt a régi kiterjesztés injektálási kockázatai ellen.

Figyeld meg a hibát, és jeleníts meg egy általános üzenetet a felhasználónak, miközben privát módon naplózod a részleteket. Ne ismételd meg a mysqli_error kimenetet a látogatóknak, mivel az felfedheti a támadó számára hasznos táblaneveket és struktúrát.

Igen. Illeszd be a mysqli szkriptet, és a mesterséges intelligencia átírhatja azt PDO használatával, lecserélheti az összefűzött lekérdezéseket kötött paraméterekre, és hozzáadhatja a try-catch hibakezelést. RevNézze meg a helyőrzőket, és utána tesztelje az egyes lekérdezéseket.

Igen. Oszd meg a hibát és a csatlakozási kódot, és a mesterséges intelligencia képes észlelni a hibás hitelesítő adatokat, a hibás hosztot vagy portot, a hiányzó adatbázist vagy a letiltott illesztőprogramot, majd javaslatot tesz a javított beállításokra.

Foglald össze ezt a bejegyzést a következőképpen: