PHP MySQLFunkce: mysqli_query a mysqli_connect

⚡ Chytré shrnutí

MySQL, PHP a další metody přístupu k databázi umožňují PHP skriptu připojit se k databázi, spouštět dotazy a číst výsledky. Tento návod zahrnuje základní funkce mysqli, kompletní příklady CRUD, připravené příkazy pro zabezpečení a alternativní metody přístupu PDO a ODBC.

  • 🔌 Spojovací: mysqli_connect otevře odkaz na MySQL server a mysqli_select_db vybere databázi, se kterou bude pracovat.
  • 🗃️ Spouštění dotazů: Funkce mysqli_query provádí příkazy INSERT, SELECT, UPDATE a DELETE pro vybranou databázi.
  • 📄 Výsledky čtení: Funkce mysqli_num_rows počítá vrácené řádky a funkce mysqli_fetch_array načte každý řádek do pole pro výstup.
  • 🔄 KRUTÝ Operaakce: Tyto funkce dohromady vytvářejí, čtou, aktualizují a mažou záznamy, což jsou čtyři základní databázové operace.
  • 🛡️ Připravené výkazy: Vazba hodnot s připravenými příkazy zastaví SQL injection, na rozdíl od vytváření dotazů zřetězením uživatelského vstupu.
  • 🧩 PDO a ODBC: PDO nabízí jedno rozhraní napříč mnoha databázovými stroji, zatímco ODBC se připojuje ke zdrojům, jako jsou Microsoft Přístup.
  • 🤖 AI Assist: Nástroje umělé inteligence dokáží převést starší kód MySQL na PDO s připravenými příkazy a ladit chyby připojení.

PHP MySQL Přístup k databázi

PHP má bohatou kolekci vestavěných funkcí pro manipulaci MySQL databází.

PHP funkce mysqli_connect

Funkce mysqli_connect v PHP se používá k připojení k MySQL databázový server.

Má následující syntaxi.

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

TADY,

  • „$db_handle“ je proměnná zdroje připojení k databázi.
  • „mysqli_connect(…)“ je funkce pro připojení k databázi PHP
  • „$db_server_name“ je název nebo IP adresa serveru, na kterém je MySQL serveru.
  • „$db_user_name“ je platné uživatelské jméno v MySQL serveru.
  • „$db_password“ je platné heslo přidružené k uživatelskému jménu v MySQL serveru.

PHP funkce mysqli_select_db

Funkce mysqli_select_db slouží k výběru databáze.

Má následující syntaxi.

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

TADY,

  • „mysqli_select_db(…)“ je funkce pro výběr databáze, která vrací hodnotu true nebo false
  • „$db_handle“ je odkaz na připojení k serveru
  • “$database_name” je název databáze

PHP funkce mysqli_query

K provedení se používá funkce mysqli_query SQL dotazy.

Funkci lze použít k provedení následujících typů dotazů:

  • Vložit
  • vybrat
  • Aktualizace
  • Vymazat

Má následující syntaxi.

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

TADY,

  • „mysqli_query(…)“ je funkce, která provádí dotazy SQL.
  • „$db_handle“ je odkaz na připojení k serveru
  • „$query“ je dotaz SQL, který se má provést

PHP funkce mysqli_num_rows

Funkce mysqli_num_rows se používá k získání počtu řádků vrácených z výběrového dotazu.

Má následující syntaxi.

<?php
mysqli_num_rows($result);
?>

TADY,

  • „mysqli_num_rows(…)“ je funkce počtu řádků
  • „$result“ je sada výsledků mysqli_query

PHP funkce mysqli_fetch_array

Funkce mysqli_fetch_array se používá k načtení polí řádků ze sady výsledků dotazu.

Má následující syntaxi.

<?php
mysqli_fetch_array($result);
?>

TADY,

  • „mysqli_fetch_array(…)“ je funkce pro načítání polí řádků
  • „$result“ je výsledek vrácený funkcí mysqli_query.

PHP funkce mysqli_close

Funkce mysqli_close se používá k uzavření otevřeného připojení k databázi.

Má následující syntaxi.

<?php
mysqli_close($db_handle);
?>

TADY,

  • „mysqli_close(…)“ je funkce PHP, která uzavírá spojení
  • „$db_handle“ je zdroj připojení k serveru

PHP MySQL Příklady CRUD

Podívejme se na praktické příklady, které tyto funkce využívají. Tento tutoriál předpokládá znalost MySQL a SQL; pokud vám tyto termíny nejsou známé, podívejte se na naše MySQL a SQL tutoriály.

Vytvoříme jednoduchou databázi s názvem my_personal_contacts s ​​pouze jednou tabulkou. Připojíme se k MySQL pomocí vašeho oblíbeného přístupového nástroje, jako je např MySQL V Workbenchu ​​nebo phpMyAdminu vytvořte databázi s názvem my_personal_contacts a poté spusťte níže uvedený skript pro vytvoření tabulky a vložení fiktivních dat.

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

Čtení záznamů z databáze

Nyní vytvoříme program, který vytiskne záznamy z databáze.

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

Spuštění výše uvedeného kódu vrátí výsledky zobrazené na níže uvedeném diagramu.

PHP: MySQL Funkce

Vkládání nových záznamů

Podívejme se nyní na příklad, který přidá nový záznam do naší tabulky. Níže uvedený kód ukazuje implementaci.

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

Spuštění výše uvedeného kódu vygeneruje zprávu „Poseidon byl úspěšně přidán do vašeho seznamu kontaktů“. Vraťte se k příkladu výběrového dotazu a znovu načtěte své kontakty, abyste zjistili, zda byl Poseidon přidán do vašeho seznamu.

Aktualizace záznamů

Podívejme se nyní na příklad, který aktualizuje záznam v databázi. Předpokládejme, že Poseidon změnil své kontaktní číslo a e-mailovou adresu.

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

Mazání záznamů

Podívejme se nyní na příklad, který odstraňuje záznamy z databáze. Předpokládejme, že na Venuši je vydán soudní zákaz přístupu a my musíme z naší databáze odstranit její kontaktní informace. databáze.

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

Zabránění SQL injection pomocí připravených příkazů

Výše uvedené příklady CRUD sestavují dotazy zřetězením řetězců. Pokud jakákoli část dotazu pochází z uživatelského vstupu, otevírá to dveře k SQL injection. Připravené příkazy to řeší odesláním dotazu a dat odděleně, takže vstup nikdy nemůže změnit strukturu dotazu.

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

Zde jsou otazníky zástupné symboly a bind_param bezpečně váže hodnoty jména a e-mailu. Databáze s nimi zachází striktně jako s daty, a proto jsou připravené příkazy, dostupné v mysqli i PDO, doporučeným způsobem pro spuštění jakéhokoli dotazu, který používá uživatelský vstup.

Objekt pro přístup k datům v PHP (PDO)

PDO je třída, která nám umožňuje manipulovat s různými databázovými enginy, jako například MySQL, PostgreSQLa MS SQL Server používajících stejné rozhraní.

Níže uvedený kód ukazuje metodu přístupu k databázi pomocí objektu PDO.

Poznámka: Níže uvedený kód předpokládá znalost jazyka SQL, polí, ošetření výjimek a cyklu 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();
}
?>

TADY,

  • „try{…}catch{…}“ je blok pro zpracování výjimek
  • „$pdo = new PDO(„mysql…“ vytvoří instanci objektu PDO a předá ovladač databáze, názvy serverů a databází, uživatelské ID a heslo.“
  • „$pdo->setAttribute…“ nastaví chybový režim PDO pro vyvolání výjimek.
  • „$pdo->exec('SET NAMES…' nastaví formát kódování

Přístup k datům v PHP ODBC

ODBC je zkratka pro Open Database Connectivity (otevřená připojitelnost databáze). Má následující základní syntaxi.

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

TADY,

  • „odbc_connect“ je vestavěná funkce PHP
  • „$dsn“ je název zdroje dat ODBC.
  • „$user_name“ je volitelné a používá se pro uživatelské jméno ODBC.
  • „$password“ je volitelný a používá se pro heslo ODBC.

Níže uvedený příklad předpokládá, že používáte Windows a vytvořili jsme ODBC propojení s Northwindem Microsoft Databáze Access s názvem 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);
?>

Nejčastější dotazy

mysqli funguje pouze s MySQL a nabízí procedurální i objektové styly. PDO pracuje s mnoha databázemi prostřednictvím jednoho rozhraní a podporuje pojmenované zástupné symboly. Oba podporují připravené příkazy; PDO je přenosnější mezi různými vyhledávacími enginy.

Ne. Původní rozšíření mysql_* bylo v PHP 7 odstraněno. Použijte místo něj mysqli nebo PDO. Obě rozšíření jsou aktivně udržována, podporují připravené příkazy a chrání před riziky injection starého rozšíření.

Zachyťte chybu a zobrazte uživateli obecnou zprávu při soukromém protokolování podrobností. Neodesílejte výstup mysqli_error návštěvníkům, protože by mohl odhalit názvy tabulek a strukturu užitečnou pro útočníka.

Ano. Vložte skript mysqli a umělá inteligence ho může přepsat pomocí PDO, nahradit zřetězené dotazy vázanými parametry a přidat ošetření chyb try-catch. Revzobrazit zástupné symboly a následně otestovat každý dotaz.

Ano. Sdílejte chybu a kód připojení a umělá inteligence dokáže odhalit nesprávné přihlašovací údaje, špatného hostitele nebo portu, chybějící databázi nebo deaktivovaný ovladač a poté navrhnout opravená nastavení, která je třeba vyzkoušet.

Shrňte tento příspěvek takto: