PHP a MySQL – MySQLi – 1. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

PHP a MySQL – MySQLi – 1. dílPHP a MySQL – MySQLi – 1. díl

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

PHP a MySQL – MySQLi – 1. díl

Google       Google       14. 1. 2010       75 446×

V tomto článku bych chtěl popsat rozšíření (extension) MySQLi, které umožňuje lepší spolupráci PHP s MySQL než starší funkce.                                                                                                                   

Reklama
Reklama

V PHP máme tři základní možnosti přístupu k databázi MySQL:

  • Rozšíření PHP MySQL - základní rozšíření umožňující práci s MySQL. Doporučuje se ho používat pouze do verze MySQL 4.1.3. I když je funkční i u novějších verzí, neumožňuje využití nových možností MySQL.
  • PHP Data Objects (PDO) - abstraktní vrstva pro komunikaci s databázemi. Umožňuje konzistentní přístup ke všem podporovaným databázím.
  • Rozšíření PHP MySQLi (MySQL Improved) - rozšíření vyvinuté pro MySQL 4.1.3 a novější. Umožňuje přístup k novým funkcím. Součástí PHP je od verze 5. MySQLi podporuje jak objektově orientovaný, tak i procedurální styl programování.

Rozšíření MySQL se v současné době nedoporučuje používat, protože není efektivní. Pro nové projekty je vhodné využít MySQLi nebo PDO.

Připojení k databázi

I když můžeme s MySQLi pracovat i procedurálně, já budu v článku využívat pouze objektový přístup.

<?php
$mysqli = new mysqli('localhost', 'uzivatel', 'heslo', 'databaze');

if ($mysqli->connect_error) {
    die('Nepodařilo se připojit k MySQL serveru (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

echo 'Připojení proběhlo úspěšně ' . $mysqli->host_info . "\n";

$mysqli->close();
?>

Nejprve vytvoříme novou instanci třídy MySQLi a konstruktoru předáme informace potřebné k připojení. Pokud se nepodaří připojit k databázovému serveru, vypíšeme chybové hlášení. V ukázce jsou dva způsoby detekce chyby. První způsob je čistě objektový, ale dá se použít až od verze PHP 5.3.0, druhý způsob je vhodný pouze pro starší verze PHP. Pokud se připojení zdařilo, tak vypíšeme informaci o navázaném připojení, kterou poskytuje metoda host_info. Na konci skriptu ukončíme připojení k databázi.

Práce s databází

Pro zasílání dotazů databázi slouží metoda mysqli::query, která má jeden povinný a jeden nepovinný parametr. Povinným parametrem je SQL dotaz, nepovinným je nastavení pracovního módu. Výchozí (a doporučeníhodnou) hodnotou tohoto parametru je konstanta MYSQLI_USE_RESULT. Při jejím použití je nutné, v případě, kdy obdržíme z MySQL objekt s výsledky dotazu, zavolat metodu mysqli_result::free_result před odesláním následujícího dotazu. Druhou možností je asynchronní přístup, který nastavíme použitím konstanty MYSQLI_ASYNC. Zde musíme pro zpracování výsledků volat metodu mysqli::poll. Ta je dostupná pouze s rozšířením mysqlnd.

<?php
$mysqli = new mysqli('localhost', 'uzivatel', 'heslo', 'databaze');

if ($mysqli->connect_error) {
    die('Nepodařilo se připojit k MySQL serveru (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

$vysledek = $mysqli->query("SELECT `Jmeno`, `Prijmeni` FROM `uzivatele`");
echo 'Z databáze jsme získali ' . $vysledek->num_rows . ' uživatelů.';

while ($uzivatel = $vysledek->fetch_assoc())
{
  printf("%s %s \n", $uzivatel['Jmeno'], $uzivatel['Prijmeni']);
}
$vysledek->free_result();
}

$mysqli->close();
?>

Výběr a zpracování dat v předchozím příkladu je velmi podobné klasickému přístupu. Pro zjištění počtu získaných řádků slouží metoda mysqli_result::num_rows a pro získání jednotlivých řádků odpovědi ve formě asociativního pole metoda mysqli_result::fetch_assoc. Rozšíření MySQLi umožňuje využít i tzv. prepare statements, ale těm se budeme věnovat až v příštím díle.

Bezpečnost

Pokud do SQL dotazů vkládáte data získaná od uživatele, např. z formuláře nebo z parametrů URL, je nuntostí tato data před použitím zkontrolovat a zabránit možným chybám nebo útokům. K tomuto slouží metoda mysqli::escape_string, která escapuje všechny nebezpečné znaky, tzn. že před tyto znaky vloží zpětné lomítko.

<?php
//OSETRENI VSTUPU ZISKANEHO Z URL
$idUzivatele = $mysqli->escape_string($_GET['id']);
$vysledek = $mysqli->query("SELECT `Jmeno`, `Prijmeni` 
                            FROM `uzivatele`
                            WHERE `ID` = " . $idUzivatele);
?>

Vložení více dotazů najednou

Metoda mysqli::query umožňuje odeslání pouze jednoho dotazu databázi. Pokud potřebujeme odeslat více dotazů v jednom kroku, musíme použít metodu mysqli::multi_query. Ta přijímá jeden argument, řetězec obsahující jednotlivé dotazy oddělené středníkem. Zpracování dat získaných těmito dotazy je mírně složitější než v případě jednoduchého dotazu. Data získaná z jednotlivých dotazů uložíme pomocí mysqli::store_result a pak už s nimi můžeme pracovat obvyklým způsobem. K přesunu na výsledek dalšího dotazu slouží metoda mysqli::next_result a ke zjištění, jestli ještě existují nějaká nezpracovaná data metoda mysqli::more_result. Postup, jak toto využít, bude nejlépe vidět na praktickém příkladu:

<?php
//JEDNOTLIVE SQL DOTAZY
$dotazy = Array();
$dotazy[] = "SELECT `Jmeno` FROM `uzivatele`";
$dotazy[] = "SELECT `Jmeno` FROM `administratori`";

//SPOJENI DOTAZU POMOCI STREDNIKU
$dotazyString = Implode(';', $dotazy);

//ODESLANI DOTAZU A ZPRACOVANI VYSLEDKU
$mysqli->multi_query($dotazyString);

do
{
  if ($vysledek = $mysqli->store_result())
  {
    while ($data = $vysledek->fetch_assoc())
    {
      // ZPRACUJEME ZISKANA DATA
    }
    $vysledek->free_result();
  }
}
// POSUNEME SE NA DALSI SADU, POKUD EXISTUJE
while ($mysqli->next_result());
?>

Tento článek by měl sloužit jako úvod k používání MySQLi v PHP. V dalším díle bych se chtěl věnovat prepared statements.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Zdeněk MoravecAutor se pohybuje v oblasti vývoje nových materiálů. Mezi jeho koníčky patří tvorba webových aplikací, programování v jazycích Java, .NET (C#), Perl, elektronika a sport (běh). Hojně využívá sázecí systém LaTeX.
Web     Facebook    

Nové články

Obrázek ke článku Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Celkem 66 % uživatelů zajímá rozšířená realita v oblasti gamingu. Mezi nimi je i 35 % těch, kteří jinak hry nehrají.
Pro téměř 50 % respondentů by bylo zajímavé zapojení virtuální objektů do reálného světa. Objekty by zůstaly tam, kde je při hře „umístili“.
Až 43 % uživatelů láká využití rozšířené reality ve sportu

Reklama
Reklama
Obrázek ke článku Instalace nejnovější verze Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached na Windows 10

Instalace nejnovější verze Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached na Windows 10

Buďte při vývoji efektivní! Pomocí tohoto návodu během chvíle vytvoříte ze svého počítače lokální webový server. Vyzbrojíte jej vším, co budete při práci potřebovat: Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached. Je to plná polní pro webové vývojáře s Windows 10. Navíc poradíme, jak mít na localhostu více projektů pomocí VirtualHost.

Obrázek ke článku Do poskytovatele managed hostingových služeb vshosting~ vstupují zahraniční investoři

Do poskytovatele managed hostingových služeb vshosting~ vstupují zahraniční investoři

Po více než roce jednání do vshosting~ vstoupili 3 investiční skupiny z Německa: Pecunalta, BrainWeb Investment a Quines Capital. Jde o investiční skupiny, které mají účast na projektech jako PlusServer (největší managed provider v Německu a jeden z největších v Evropě), PLESK, cPanel, CloudLinux, GoDaddy (největší světový hostingový poskytovatel z USA), či Acronis, pomohou vshosting~ v jeho plánované mezinárodní expanzi na další zahraniční trhy. Ve vshosting~ nyní drží 75% podíl, zbylých 25 % zůstává zakladatelům vshosting~, kterými jsou Damir Špoljarič (CEO) a Jan Martinů (CTO).

Obrázek ke článku Posuňte své znalosti IT na výrazně vyšší úroveň

Posuňte své znalosti IT na výrazně vyšší úroveň

Zájem o IT odborníky je v současnosti v tuzemsku i v zahraničí enormní a vedení firem si moc dobře uvědomuje, jak těžké je získat ty správné. I přesto, že je odborníků na trhu dlouhodobý nedostatek, stále platí, že část z nich je - a bude - placena výrazně lépe než ti ostatní. Proč tedy nebýt mezi nimi?

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý