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


