MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');



Podobné dokumenty
Návrh a tvorba WWW stránek 1/14. PHP a databáze

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

17. července :51 z moravec@yahoo.com

Střední odborná škola a Střední odborné učiliště, Hořovice

4. lekce Přístup k databázi z vyššího programovacího jazyka

PHP a Large Objecty v PostgreSQL

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Embedded SQL v C/C++ úvod. Administrace Oracle Kateřina Opočenská

ANOTACE vytvořených/inovovaných materiálů

Střední odborná škola a Střední odborné učiliště, Hořovice

5. POČÍTAČOVÉ CVIČENÍ

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

1 Webový server, instalace PHP a MySQL 13

Vícerozměrná pole. Inicializace pole

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

KIV/ZIS cvičení 5. Tomáš Potužák

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Střední odborná škola a Střední odborné učiliště, Hořovice

Microsoft Office. Excel vyhledávací funkce

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Střední odborná škola a Střední odborné učiliště, Hořovice

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Text úlohy. Systémový katalog (DICTIONARY):

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

Sada 1 - PHP. 03. Proměnné, konstanty

VISUAL BASIC. Práce se soubory

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Programování v jazyku C# II. 5.kapitola

Maturitní otázky z předmětu PROGRAMOVÁNÍ

PHP tutoriál (základy PHP snadno a rychle)

Výjimky a ošetřování chyb v PHP. Who is General Failure and why is he reading my disk?!

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Algoritmizace a programování

Vstupní požadavky, doporučení a metodické pokyny

AUTOMATICKÉ ŘÍZENÍ S INTERNETOVOU KOMUNIKACÍ V PHP Automatic Control with Internet Communication in PHP

Úvod do databázových systémů

8 Třídy, objekty, metody, předávání argumentů metod

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

DUM 12 téma: Příkazy pro tvorbu databáze

Databáze pro evidenci výrobků

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programování v jazyce JavaScript

Programujeme v softwaru Statistica - příklady

Přehled kapitol 1. Základní kostra HTML dokumentu 2. Členění dokumentu 3. Kaskádové styly - CSS 4. Pozadí stránky 5.

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Django Urls, views, templates

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí

Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Informační systémy ve zdravotnictví. 6. cvičení

DUM 06 téma: Tvorba makra pomocí VBA

Distanční opora předmětu: Databázové systémy Tématický blok č. 8: Transact SQL Autor: RNDr. Jan Lánský, Ph.D.

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Úvod do databázových systémů

6. blok část C Množinové operátory

Z. Kotala, P. Toman: Java ( Obsah )

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

WNC::WebNucleatCreator

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Stručný úvod pro programátory. Michal Kuchta

Programujeme v softwaru Statistica

Rezervační systém Tvorba WWW stránek

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Jaku b Su ch ý 1

Informační systém webhostingu

Reranking založený na metadatech

Dokumentace k API SSLmarketu. verze 1.3

MS Excel makra a VBA

1. Webový server, instalace PHP a MySQL 13

Administrace Oracle. Práva a role, audit

Sekvenční a podmíněné provádění

Střední odborná škola a Střední odborné učiliště, Hořovice

LEKCE 6. Operátory. V této lekci najdete:

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

18 20 M/01 Informační technologie

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

Uživatelská dokumentace

Ukázka knihy z internetového knihkupectví

Administrace služby - GTS Network Storage

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

DELTA - STŘEDNÍ ŠKOLA INFORMATIKY A EKONOMIE, s.r.o. Obor informační technologie AJAX ESHOP. Maturitní projekt. Třída:

Kurz je rozdělen do čtyř bloků, které je možné absolvovat i samostatně. Podmínkou pro vstup do kurzu je znalost problematiky kurzů předešlých.

Úvod do PHP s přihlédnutím k MySQL

TECHNICKÁ DOKUMENTACE SOCIÁLNÍ SÍŤ MRSHARE. David Malát, Adam Novák, David Vurbs, Dominik Walta. SPŠ Na Proseku 2012/13. Pod velením Davida Vurbse

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Programování v Pythonu

Úvod do databázových systémů

Transkript:

MySQLi (objektově) 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. 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í. 1. Vytvoření instance třídy mysqli Nejprve vytvoříme novou instanci třídy mysqli a konstruktoru můžeme předat informace potřebné k připojení a výběru databáze. Tím ušetříme několik řádků kódu, ale kvůli větší přehlednosti můžeme volat konstruktor bez parametrů a patřičné hodnoty předat do metod pro připojení ($mysqli -> connect) a výběr databáze ($mysqli ->select_db). Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze'); 1.1. Připojení k serveru mysql Pokud jsme nepředali parametry pro připojení k serveru do konstruktoru, je potřeba zavolat metodu $mysqli -> connect $mysqli = new mysqli(); $mysqli -> connect ('localhost', 'login', 'heslo', 'databaze'); 1.2. Výběr databáze mysql Pokud se potřebujeme připojit k více databázím, nebo jsme nezadali název databáze do konstruktoru při vytváření třídy nebo metody $mysqli -> connect, můžeme použít metodu $mysqli ->select_db $mysqli -> select_db ('databaze'); 1.3. Zprávy o chybách připojení Při práci s databázemi, může dojít k neočekávaným závadám. Rozšíření mysqli obsahuje dvě metody, které nám můžou poskytnout informace o chybě: $mysqli->connect_error a $mysqli->connect_errno. (u objektově orientované alternativy, se dá použít až od verze PHP 5.3.0) $mysqli->connect_error $mysqli->connect_errno vrací chybovou zprávu odpovídající povaze vzniklé chyby vrací číselný kód odpovídající chybové zprávy 1

$mysqli = @new mysqli('localhost', 'chybny_login', 'heslo', 'databaze'); if ($mysqli->connect_error) { die('při připojení došlo k chybě: '. $mysqli->connect_error. '. Číslo chyby: '. $mysqli->connect_errno); Výsledek v prohlížeči: Při připojení došlo k chybě: Access denied for user 'fake_user'@'localhost' (using password: YES). Číslo chyby: 1045 1.4. Uzavření připojení Jakmile nějaký skript skončí své vykonávání, automaticky se uzavřou všechna otevřená databázová připojení a zotaví se prostředky. Pokud ale bude nějaká stránka požadovat připojování k více databázím, mělo by se každé připojení uzavírat. Pokud se ale používá jen jediné připojení, je dobrým zvykem jej také na konci skriptu uzavřít. Připojení se uzavírá metodou $mysqli -> close. $mysqli->close(); Metoda uzavře dříve otevřené databázové připojení. Vrátí TRUE, pokud bude uspěšná, jinak vrátí FALSE. 2. Dotazy 2.1. Vykonání dotazu Jakýkoliv druh interakce s databází se děje přes nějaký dotaz. 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, který lze zapsat buď pomocí proměnné, nebo přímo do metody. Příklad1: $query = "SELECT Name FROM City"; Příklad2: $result = $mysqli->query("select Name FROM City"); Nepovinným parametrem se modifikuje chování metody: MYSQLI_STORE_RESULT: vrátí výsledky jako bufferovanou sadu, což znamená, že celá sada bude pro navigaci dostupná najednou. Je to výchozí nastavení. MYSQLI_USE_RESULT: vrátí výsledky jako nebufferovanou sadu, což znamená, že se sada bude získávat ze serveru postupně na základě potřeb. Příklad3: $result = $mysqli->query("select Name FROM City", MYSQLI_USE_RESULT); 2

2.2. Zotavení paměti dotazu V situacích, kdy se získávají rozsáhlé sady výsledků, by se měla zotavit paměť jakmile se se sadou skončí. K tomu slouží metoda $mysqli->free_result. $mysqli = @new mysqli('localhost', 'login', 'heslo', 'databaze'); if ($mysqli->connect_error) { die('při připojení došlo k chybě: '. $mysqli->connect_error. '. Číslo chyby: '. $mysqli->connect_errno); $result = $mysqli->query("select Name FROM City", MYSQLI_USE_RESULT); // Něco se provede se sadou výsledků $result->free(); // Zotaví se prostředky dotazu 2.3. Příprava sady výsledků ke zpracování Původní rozšíření mysql PHP umožňovalo vykonávat dotazy a vracet sady výsledků buď jako bufferované (mysql_query()) nebo nebufferované (mysql_unbuffered_query()). Toto chování je k dispozici i v mysqli. Požadovaný typ výsledků můžeme deklarovat buď výše uvedenou metodou $mysqli->query a nastavením parametru, nebo pomocí metody $mysqli->real_query v součinnosti s $mysqli->store_result nebo $mysqli->use_result. $query = "SELECT Name FROM City"; $mysqli->real_query($query); $result = $mysqli->store_result(); Metoda $mysqli->query je s metodou $mysqli->real_query identická, jen s tím rozdílem, že u metody $mysqli->real_query není možné určit typ vrácené sady výsledků, takže je nutné navíc volat buď $mysqli->store_result nebo $mysqli->use_result. 3. Analýza výsledků Jakmile je vykonaný dotaz a je ke zpracování připravena sada výsledků, je potřeba analyzovat získané řádky. K tomu slouží několik metod, s nimiž se získávají sloupcové hodnoty uložené v jednotlivých řádcích. Která metoda se zvolí, záleží jen na uživateli, protože se liší jen způsob, jakým se odkazuje na sloupce. 3.1. Metoda mysqli_fetch_row() Tato metoda získá ze sady výsledků celý řádek a hodnoty umístí do indexovaného pole. Pro výpis dat lze například použít funkci list() a cyklus while, kdy se budou pro každý řádek hodnoty sloupců přiřazovat do proměnných. 3

metoda mysqli_fetch_row() s použitím funkce list() a cyklu while $query = "SELECT productid, name, price FROM product ORDER BY name "; while (list($product, $name, $price) = $result->fetch_row()) { echo "($productid) $name: $price <br />"; 3.2. Metoda mysqli_fetch_array() Metoda mysqli_fetch_array() je jen rozšířená verze mysqli_fetch_row(). Pomocí nepovinného parametru lze ovlivnit chování metody: MYSQLI_ASSOC: vrátí řádek jako asociativní pole, kde je klíčem název sloupce a hodnotou obsah sloupce. MYSQLI_NUM: vrátí řádek jako číselné indexované pole, pořadí je určeno pořadím názvů sloupců specifikovaných dotaze. Pokud se zvolí tato hodnota, bude pole fungovat stejně jako mysqli_fetch_row(). MYSQLI_BOTH: vrátí řádek jako asociativní pole i jako číselně indexované pole. Proto se na každý sloupec dá odkazovat jeho číselnou pozicí i název sloupce. Je to výchozí hodnota. Příklad1: sada výsledků získaná pomocí asociativních indexů $query = "SELECT productid, name, price FROM product ORDER BY name"; while ($row = $result->fetch_array(mysqli_assoc)) { $productid = $row[productid]; $name = $row[name]; $price = $row[price]; echo "($productid) $name: $price <br />"; Příklad2: sada výsledků získaná pomocí číselných indexů $query = "SELECT productid, name, price FROM product ORDER BY name "; while ($row = $result->fetch_array(mysqli_num)) { $productid = $row[0]; $name = $row[1]; $price = $row[2]; echo "($productid) $name: $price <br />"; 4

3.3. Metoda mysqli_fetch_assoc() Metoda mysqli_fetch_assoc() pracuje stejně jako předchozí metoda mysqli_fetch_array(), když se v parametru zadá hodnota MYSQLI_ASSOC. 3.4. Metoda mysqli_fetch_object() Metoda mysqli_fetch_object() pracuje podobně jako metoda mysqli_fetch_array(), ale vrátí se objekt, nikoliv pole. sada výsledků získaná pomocí objektů $query = "SELECT productid, name, price FROM product ORDER BY name "; while ($row = $result->fetch_object()) { $productid = $row->productid; $name = $row->name; $price = $row->price; echo "($productid) $name: $price <br />"; 4. Vykonání několika dotazů za sebou Rozšíření mysqli disponuje novou schopností, která umožňuje vykonat několik dotazů za sebou, a pak získávat jednotlivé sady tak, jak je to potřeba. 4.1. Metoda mysqli_multi_query() Metoda mysqli_multi_query() umí vykonat jeden dotaz, nebo několik dotazů za sebou, což dává možnost získat jednotlivé sady později. 4.2. Metoda mysqli_more_results() Metoda mysqli_more_results() určí, zda ještě zbývá nějaká sada výsledků v tom, co se vrátilo z volání metody mysqli_multi_query(). 4.3. Metoda mysqli_multi_query() Metoda mysqli_next_results() získá další sadu výsledků z těch, které vrátila metoda mysqli_multi_query(). 5. Připravené příkazy Běžně se stává, že se nějaký dotaz vykonává opakovaně, jen se při každé iteraci použijí jiné parametry. Když se to provádí konvenční metodou mysql_query() ve spojení s mechanizmem cyklu, znamená to nejen dost zbytečné zátěže navíc, protože se musí opakovaně analyzovat platnost téměř identického dotazu, ale je to i dost nepohodlné z hlediska psaní kódu, protože je třeba při iteraci opakovaně překonfigurovávat dotaz pomocí nových hodnot. Aby se tedy daly lépe řešit záležitosti okolo opakovaně vykonávaných dotazů, byly zavedeny připravené příkazy. 5

K dispozici jsou dvě varianty: Vázané parametry: varianta s vázaným parametrem umožňuje uložit dotaz na server MySQL tak, že se opakovaně odesílá na server jen ta data, která se v každé iteraci mění a tam se integrují do dotazu, který se pak vykoná. Pokud např. vytvoříme nějakou webovou aplikaci, přes kterou vkládáme nějaké výrobky do databáze, vytvoříme formulář, do kterého půjde zadat současně až 10 výrobků (id, název, popis, cena). Protože se budou tyto informace vkládat pomocí identických dotazů (údaje ale budou pokaždé jiné), bylo by rozumné použít připravený příkaz s vázanými parametry. Vázané výsledky: varianta s vázanými výsledky umožňuje nastrkat hodnoty ze sady výsledků do číselně indexovaného nebo asociovaného pole tak, že se sváží proměnné PHP s odpovídajícími sloupci, což by se jinak dělalo dost těžkopádně. Pak se dál pracuje s naplněnými proměnnými. 5.1. Metoda mysqli_stmt_prepare() Bez ohledu na to, zda se použije připravený příkaz vázaný na parametry nebo vázaný na výsledky, musí se nejprve připravit k vykonání metodou mysqli_stmt_prepare(). $stmt->prepare($query); 5.2. Metoda mysqli_stmt_close() Jakmile se připravený příkaz přestane používat, dají se metodou mysqli_stmt_close() zotavit prostředky, které požadoval. $stmt->close(); 5.3. Metoda mysqli_stmt_execute() Jakmile je příkaz připravený, je potřeba ho vykonat. Kdy přesně se má příkaz vykonat, záleží na tom, zda pracujeme s vázanými parametry, nebo s vázanými výsledky. Budou-li to vázané parametry, vykonáme příkaz poté, co se parametry skutečně svážou metodou mysqli_stmt_bind_param(). Budou-li to vázané výsledky, vykonáme příkaz předtím, než vázat výsledky metodou mysqli_stmt_bind_result(). $stmt->execute(); 5.4. Metoda mysqli_stmt_bind_param() Používá-li se varianta připraveného příkazu s vázanými parametry, musí se použít metoda mysqli_stmt_bind_param(), aby se svázali názvy proměnných s odpovídajícími sloupci dotazu. Metoda obsahuje povinný parametr types, který reprezentuje datové typy proměnných, které následují tak, jak jsou zapsány v dotazu. Parametr se zapisuje proto, aby se 6

zajistilo co nejefektivnější zakódování dat, které se odesílají na server. Existují 4 dostupné kódy: i: všechny tyty integer d: tyty double a float b: typy blob s: všechny ostatní typy (včetně řetězců) $stmt->bind_param( ssds, $productid, $name, $price, $description); 5.5. Metoda mysqli_stmt_bind_result() Po připravení a vykonání dotazu, můžeme svázat proměnné na odpovídající získané sloupce pomocí metody mysqli_stmt_bind_result(). $stmt->bind_result($productid, $name, $price, $description); 5.6. Metoda mysqli_stmt_fetch() Metoda mysqli_stmt_fetch() získá řádek z výsledků připraveného příkazu a přiřadí sloupce do svázaných výsledků. $query = "SELECT productid, name, price, description FROM product ORDER BY productid"; $stmt = $mysqli->stmt_init; $stmt->prepare($query); $stmt->execute(); $stmt->bind_result($productid, $name, $price, $description); while($stmt->fetch()) { echo "$productid, $name, $price, $description <br />"; $stmt->close(); $mysqli->close(); 5.7. Další metody Metoda $stmt->affected_rows $stmt->free_result $stmt->num_rows Popis Vrací počet řádků, které ovlivnil naposled vydaný příkaz specifikovaný objektem stmt (je relevantní jen pro vkládací, aktualizační a odstraňovací dotazy). Zotaví paměť, kterou konzumoval příkaz specifikovaný objektem stmt. Vrací počet řádků, které získal příkaz specifikovaný objektem stmt. $stmt->errno(mysqli_stmt stmt) Vrátí chybový kód z naposled vydaného příkazu specifikovaného objektem stmt. $stmt->error(mysqli_stmt stmt) Vrátí popis chyby z naposled vydaného příkazu specifikovaného objektem stmt. 7

Použitá literatura [1] Velká kniha PHP MySQL5, W. Jason Gilmore, Zoner Press, 2007 [2] http://programujte.com/?akce=clanek&cl=2009103100-php-a-mysql-mysqli-1-dil [3] http://www.php.net/manual/en/class.mysqli.php 8