Tvorba webu 1. Přístup k databázi Martin Klíma. Tvorba Webu 1 1



Podobné dokumenty
X36WWW. Přístup k databázi Martin Klíma. Tvorba Webu 2 1

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

Přístup k databázi z webové aplikace v PHP. Martin Klíma

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

Použití databází na Webu

Jazyk SQL databáze SQLite. připravil ing. petr polách

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

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

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

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

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

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

Databáze II. 1. přednáška. Helena Palovská

Michal Krátký, Miroslav Beneš

Databázové systémy trocha teorie

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databázové systémy a SQL

Databázové systémy úvod

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

8.2 Používání a tvorba databází

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

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

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

Semestrální práce z DAS2 a WWW

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

Databázové systémy. Cvičení 6: SQL

Databázové systémy Cvičení 5.2

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Sada 1 - PHP. 14. Úvod do jazyka SQL

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

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

Verzování a publikace dat na webu za pomoci PostgreSQL

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

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

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

Databáze I. 1. přednáška. Helena Palovská

MySQL sežere vaše data

Databáze I. Přednáška 7

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


Databázové a informační systémy

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

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

PHP a Large Objecty v PostgreSQL

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Databáze I. Přednáška 4

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

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

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

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

J z a yk y PH P P P p o p k o r k.

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Databáze SQL SELECT. David Hoksza

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Univerzita Pardubice. Centrální správa dokumentů

PG 9.5 novinky ve vývoji aplikací

Administrace Oracle Práva a role, audit. Kukhar Maria

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

Tabulka fotbalové ligy

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Zápisování dat do databáze

Databázové a informační systémy

4IT218 Databáze. 4IT218 Databáze

Jazyk SQL 3 - DML, DDL, TCL, DCL

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

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

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

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Stěhování aplikací. Michal Tomek, Sales Manager

SQL. relační databázový systém. v úvodní kurz jazyka SQL

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

SQL injection princip a ochrana

Plánování a vývoj základního frameworku

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

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

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

Popis souboru pro generování reportů *.report

Databáze I. 5. přednáška. Helena Palovská

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Optimalizace dotazů a databázové transakce v Oracle

Práva a role. Martin Polák. NDBI013 Administrace Oracle

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

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

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

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Oracle XML DB. Tomáš Nykodým

Transkript:

Tvorba webu 1 Přístup k databázi Martin Klíma 1

DATABÁZE ÚVOD 2

Relační databáze - pojmy Databázový systém program pro práci a správu DB Databáze souhrn datových struktur obsahující data Tabulky databáze se skládá z tabulek, tabulka má sloupce a řádky Sloupec popis vlastnosti objektu Řádek, záznam konkrétní data uložená v tabulce Primární klíč množina sloupců, které jednoznačně identifikují záznam Relace (podmnožina kartézského součinu) 3

Databáze - relace Relace 1:1 ID_Objednavky Mnozstvi Produkt 1 10 Okurky 2 15 Papriky ID_Transakce ID_Objednavky Datum 33 1 1.1.2005 34 2 5.1.2005 Relace 1:N ID_Objednavky Mnozstvi Produkt ID_Zakaz nika 1 10 Okurky 102 2 15 Papriky 102 ID_Zakaznika Jmeno 102 Novák 103 Omáčka 4

Databáze - relace Relace M:N ID_reky Jmeno 1 Labe 2 Vltava ID_Zeme Nazev 102 CR 103 Nemecko Převod na 1:N ID_reky Jmeno 1 Labe 2 Vltava ID_reky ID_Zeme 1 102 1 103 2 102 ID_Zeme Nazev 102 CR 103 Nemecko 5

Manipulace s databází Jazyk SQL (Simple Query Language) DDL = Data Definition Language DML = Data Manipulation Language DDL Create Alter Drop DML Select INSERT Update Delete 6

Příklad použití databáze Databáze zboží Kategorie zboží Kategorie může mít N podkategorií Kazdá podkategorie patří do jedné kategorie (strom) Každé zboží může patřit do více kategorií 7

DB - příklad zbozi ID Jmeno Cena 1 Jablka č. 35 2 Jablka z. 38 zbozi_kategorie ID IDZbozi IDKategorie 1 1 1 2 2 1 3 1 4 4 2 4 kategorie ID Nazev Nadkategorie 1 Ovoce null 2 Zelenina null 3 Okurky 103 4 Potraviny null 8

MYSQL 9

MySQL Velice úspěšný RDBMS systém Open source Poskytovaný skoro všude Vlastnosti několik různých engine rychlé i pomalé transakční i netransakční podpora různých kódování uložené procedury kninovny, PHP podpora od vznikuk PHP 10

Databázové enginy MyISAM InnoDB MERGE MEMORY EXAMPLE FEDERATED ARCHIVE NDB Zjistit aktuálně instalované enginy můžeme takto: SHOW ENGINES\G 11

MyISAM Engine Velmi rychlý Není transakční (proto je také rychlý) Nepodporuje ref. integritu Syntakticky ano, fakticky ne Každá tabulka je v samostatném souboru soubor se jmenuje podle jména tabulky 12

Innodb engine Přehled vlastností Plně transakční zpracování ACID kompatibilní = commit, rollback, zotavení Zamykání záznamů (po řádcích) Podporuje cizí klíče (FOREIGN KEY) Je součástí základní distribuce Rychlý engine, ale ne tak rychlý jako MyISAM GNU GPL License Version 2 13

INNODB vlastnosti Tabulky jsou uloženy ve společném souboru (souborech) a to včetně indexů Tabulky mohou být uloženy ve více souborech i na více různých discích Tabulky mohou být uloženy i separátně, každá v jednom souboru pozor, chová se to jinak než MyISAM nelze jen tak kopírovat 14

PHP A DATABÁZE 15

PHP a DB PHP má nativní podporu pro většinu existujících DB MySQL v první řadě Tři způsoby, jak může DB podporovat 6. Nativní podpora pomocí dynamické knihovny např. mysql.dll 7. Nativní podpora v jádře PHP je nutné zkompilovat 8. Pomocí ODBC je nutné mít podporu ODBC My se zaměříme na nativní podporu 16

Naše DB CREATE TABLE `zbozi` ( `ID` int(11) NOT NULL auto_increment, `Nazev` varchar(100) NOT NULL, `Popis` text, `ObrazekURL` varchar(50) default NULL, `Cena` double NOT NULL default '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; GRANT ALL PRIVILEGES ON x36www.* TO x36www_user@localhost IDENTIFIED BY "x36heslo"; FLUSH PRIVILEGES; 17

Nutné kroky při práci s DB 1. Připojení k databázovému stroji URL databáze ověření uživatele 2. Výběr databáze body 1 a 2 lze sloučit 3. Sestavení a poslání dotazu 4. Čtení resultsetu (pokud ho daný dotaz vrací) 5. Uvolnění resultsetu 6. Uzavření spojení Pozor!!! Každá operace může skončit chybou, musím na to správně reagovat 18

Implementace define ("DB_HOST", "localhost"); define ("DB_NAME", "x36www"); define ("DB_USER", "x36www_user"); define ("DB_PASSWD", "x36heslo"); // pokusim se pripojit k DB stroji $link = mysqli_connect(db_host, DB_USER, DB_PASSWD); if (!$link) { echo "Nepodařilo se spojit s DB.<br>"; echo mysqli_connect_error(); exit(); // pokusim se vybrat si spravnou databazi $success = mysqli_select_db($link, DB_NAME); if (!$success) { echo "Nepodařilo se přepnout na správnou databázi"; exit(); 19

Implementace // sestavim si dotaz $sql = "SELECT * FROM zbozi WHERE zbozi.cena <=100 ORDER BY zbozi.cena, zbozi.nazev"; // provedu dotaz $result = mysqli_query($link, $sql); if ($result) { // iteruj vysledek a vypis ho na obrazovku while ($row = mysqli_fetch_assoc($result)) { echo "\n<div>"; echo htmlspecialchars($row['nazev']); echo ": "; echo $row['cena']; echo "</div>"; // uvoni resultset mysqli_free_result($result); // uzavri spojeni s db mysqli_close($link); 20

Co vrací mysqli_query Pro dotazy SELECT, SHOW, DESCRIBE a EXPLAIN vrací mysqli_query() výsledek (objekt s tabulkou dat), který musí být zpracován dalšími funkcemi. Pro UPDATE, INSERT, DELETE, DROP a další dotazy pro manipulaci s DB vrací mysqli_query() hodnotu typu Boolean. 21

Zpracování výsledku z mysqli_query Mnoho funkcí na zpracování $result mysqli_fetch_array Fetch a result row as an associative, a numeric array, or both mysqli_fetch_assoc Fetch a result row as an associative array mysqli_fetch_field_direct Fetch meta-data for a single field mysqli_fetch_field Returns the next field in the result set mysqli_fetch_fields Returns an array of objects representing the fields in a result set mysqli_fetch_lengths Returns the lengths of the columns of the current row in the result set mysqli_fetch_object Returns the current row of a result set as an object mysqli_fetch_row Get a result row as an enumerated array 22

SQL injection Často sestavujeme dotaz z parametru zadanych uživatelem. Musíme počítat s tím, že uživatel nemusí zadat "pěkná" data. Uživatel může zničit sql dotaz. Uživatel může pozměnit dotaz tak, že vrátí jiny výsledek. 23

SQL Injection zkuste url: sql_injection.php?max=aaa // sestavim sql dotaz z $_GET parametru // predpokladam, ze uzivatel ve formulari zadal max cenu zbozi // parametr max // spatne sestaveny sql dotaz $sql_spatne = "SELECT * FROM zbozi WHERE Cena <= ". $_GET['max']." ORDER BY Nazev"; $cena_max = intval($_get['max']); $sql_spravne = "SELECT * FROM zbozi WHERE Cena <= ". $cena_max." ORDER BY Nazev"; echo htmlspecialchars("spatne: ".$sql_spatne); echo "<br/>"; echo htmlspecialchars("spravne: ".$sql_spravne); echo "<br/>"; 24

SQL Injection zkuste URL: sql_injection.php?search=dd'%20or%20true%20or%20nazev%20like %20'% // predpokladam, ze uzivatel zadal vyhledavaci retezec nazvu // param search // rekneme, ze v systemu jsou dve role: 1: admin, 2: obyc uzivak $sql_spatne2 = "SELECT * FROM zbozi WHERE Priv = 2 AND Nazev like '%".$_GET['search']."'"; $search = addslashes($_get['search']); $sql_spravne2 = "SELECT * FROM zbozi WHERE Priv = 2 AND Nazev like '%".$search."'"; echo htmlspecialchars("spatne 2: ".$sql_spatne2); echo "<br/>"; echo htmlspecialchars("spravne 2: ".$sql_spravne2); 25

Veškeré skripty musí být ošetřeny na SQL Injection..je to zápočtová podmínka 26

DB A OBJEKTOVÉ PROG. VZORY 27

Jen jedno připojení k databázi Singleton pro připojení k DB Připojení je obecně drahá záležitost Nepřipojuji se tehdy, když uz spojením mám 28

// jedina trida, ktera umi vsechno s DB class DB { private static $instance = null; private $db_link = null; private $result = null; private function construct() { public static function getinstance() { if (self::$instance == null) { self::$instance = new DB(); self::$instance->connect(); return self::$instance; public function connect() { if ($this->db_link == null) { $link = mysqli_connect(db_host, DB_USER, DB_PASSWD, DB_NAME); if (!$link) { throw new DBException(mysqli_errno($link)); mysqli_select_db($link,db_name); $this->db_link = $link; return $this->db_link; 29

// pokračování public function query($sql) { $this->connect(); $this->result = mysqli_query($this->db_link,$sql); if (mysqli) if (!$this->result) { throw new DBException(mysqli_error($this->db_link), $sql); return $this->result; 30

Vzor Factory Používá se tehdy, když chceme získat instanci nějakého objektu, ale nechceme se starat o to, jak tento objekt vytvořit Příklad: chceme přistupovat k databázi databází je ale mnoho různých druhů (mysql, oracle, ) všechny db implementují stejné rozhraní 31

Vzor Factory Aplikační logika DB abstraktní vrstva MySQL PosgreSQL Oracle Sybase... 32

Vzor Factory Abstraktní DBLayervrstva connect($param) query($sql) Implements Implementace PGDBLayer X connect($param) query($sql) MYSQLDBLayer Implementace Y connect($param) query($sql) 33 kuk kosik_objektovy1.5.php

Vzor Factory Impl 1 interface DBLayer { public function connect($param); public function query($sql); class MySQLDBLayer implements DBLayer { public function connect($params) { // mysql_connect(...) public function query($sql) { // mysql_query(...) class PGDBLayer implements DBLayer { public function connect($params) { //pg_connect(...) public function query($sql) { // pg_query(...) 34

Vzor Factory Impl 2 // vzor factory = tovarna na objekty class DBFactory { // zde to prijde! // vim, ze vratim rozhrani typu DBLayer public static function getdblayer($type){ switch ($type) { case "MySQL": return new MySQLDBLayer(); break; case "PG": return new PGDBLayer(); break; default: return new MySQLDBLayer(); 35

Pear DB package... OO API jednoduchý přechod na jiný typ databáze používá standardní DSN(data source name) pro specifikaci parametrů DB vrací objekt s výsledkem každého dotazu přenositelné chybové hlášky sekvenční a nesekvenční načítání řádků a hromadné načítání načtený řádek může být vrácen jako asociativní pole, pole s číselnými indexy nebo objekt podpora pro omezení počtu řádků podpora transakcí informace o tabulkách... 36

DB package DB staví na existujících PHP rozšířeních (kompilovaných) Tyto databáze procházejí testy: fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql, sqlite, sybase. DB je kompatibilní s PHP 4 a PHP 5 37

DSN - data source name Před připojením k DB je třeba vytvořit platný DSN obecný tvar: phptype(dbsyntax)://jmeno:heslo@protokol+host/databázee?volba=hodnota příklady Připojení k db přes soket mysql://user@unix(/path/to/socket)/pear Připojení k db na nestandardním portu pgsql://user:pass@tcp(localhost:5555)/pear Připojení k SQLite na Unixu s použitím voleb sqlite:////full/unix/path/to/file.db?mode=0666 Připojení k SQLite na Unixu s použitím voleb sqlite:///c:/full/windows/path/to/file.db?mode=0666 Připojení k MySQLi přes SSL mysqli://user:pass@localhost/pear?key=client-key.pem&cert=clientcert.pem Připojení k MS Access někdy vyžaduje admin jako uživatelské jméno odbc(access)://admin@/datasourcename 38

Metody connect, disconnect Připojuje (odpojuje) se k databázi. Používá DSN a další parametry. <?php require_once 'DB.php'; $dsn = 'pgsql://someuser:apasswd@localhost/thedb'; $options = array( 'debug' => 2, Využití vzoru Factory 'portability' => DB_PORTABILITY_ALL ); $db =& DB::connect($dsn, $options); if (PEAR::isError($db)) { die($db->getmessage()); //... $db->disconnect();?> 39

Někomu je milejší specifikovat DSN jako pole <? php require_once 'DB.php'; $dsn = array( ); 'phptype' => 'pgsql', 'username' => 'someuser', 'password' => 'apasswd', 'hostspec' => 'localhost', 'database' => 'thedb' $options = array( ); 'debug' => 2, 'portability' => DB_PORTABILITY_ALL $db =& DB::connect($dsn, $options); if (PEAR::isError($db)) {?> die($db->getmessage()); 40

Metoda query Odesílá dotaz do db a vrací výsledek Může být parametrizována <?php require_once 'DB.php'; $db =& DB::connect('pgsql://usr:pw@localhost/dbnam'); if (PEAR::isError($db)) { die($db->getmessage()); $res =& $db->query('select * FROM clients'); if (PEAR::isError($res)) {?> die($res->getmessage()); Proveď dotaz a vrať ho do proměnné $res <?php require_once 'DB.php'; $db =& DB::connect('pgsql://usr:pw@localhost/dbnam'); $sql = 'select * from clients where clientid =?'; $data = 53; $res =& $db->query($sql, $data); if (PEAR::isError($res)) {?> die($res->getmessage()); Proveď parametrizovan dotaz a vrať ho do proměnné $res 41

Načítání výsledků Tři typy datových struktur DB_FETCHMODE_ORDERED (default) Array ( [0] => 28 [1] => hi ) DB_FETCHMODE_ASSOC Array ( [a] => 28 [b] => hi ) DB_FETCHMODE_OBJECT stdclass Object ( [a] => 28 [b] => hi ) 42

Příklad načtení výsledků <?php $res =& $db->query('select * FROM users'); while ($res->fetchinto($row, DB_FETCHMODE_ASSOC)) { echo $row['id']. "\n";?> 43

Problém rozdílné syntaxe u různých databází. Příklad: db1: INSERT INTO tbl_name (col1, col2) VALUES (expr1, expr2) db2: INSERT INTO tbl_name SET col1=expr1, col2=expr2 <?php $statement['db1']['insert_person'] = 'INSERT INTO person (surname, name, age) VALUES (?,?,?)'; $statement['db2']['insert_person'] = 'INSERT INTO person SET surname=?, name=?, age=?';?> 44

Metody prepare, execute Před vykonáním dotazu je tento nejprve zpracován metodou prepare. <?php $sth = $db->prepare('insert INTO numbers VALUES (?,?,?)'); $data = array(1, 'one', 'en'); $db->execute($sth, $data);?> sestaví a provede dotaz: INSERT INTO numbers VALUES (1, one, en ) 45

Metoda executemultiple <?php $alldata = array( array(1, 'one', 'en'), array(2, 'two', 'to'), array(3, 'three', 'tre'), array(4, 'four', 'fire')); $sth = $db->prepare('insert INTO numbers VALUES (?,?,?)'); foreach ($alldata as $row) { $db->execute($sth, $row); Zbytečná práce $db->executemultiple($sth, $alldata);?> 46

Metody autoprepare, autoexecute Snaha oprostit se od psaní UPDATE a INSERT dotazů Jejich syntaxe se navíc liší pro různé databáze Nechme tyto dotazy vygenerovat automaticky Chci postupovat stejným parametrickým způsobem jako pro prepare, execute 47

Metoda autoprepare INSERT INTO table (id, name, country) VALUES (?,?,?) <?php $table_name = 'user'; $table_fields = array('id', 'name', 'country'); $sth = autoprepare($table_name, $table_fields, $db-> DB_AUTOQUERY_INSERT); if (PEAR::isError($sth)) { die($sth->getmessage());?> Vytvoř INSERT dotaz s těmito parametry. Dotaz je vytvořen pro konkrétní DB (instance v proměnné $db 48

Metody autoprepare UPDATE table SET id=?, name=?, country=? WHERE... <?php $table_name = 'user'; $table_fields = array('name', 'country'); $table_values = array('bob', 'USA'); $sth = $db->autoprepare($table_name, $table_fields, DB_AUTOQUERY_UPDATE, 'id = 1'); if (PEAR::isError($sth)) { die($sth->getmessage()); $res =& $db->execute($sth, $table_values); if (PEAR::isError($res)) { die($res->getmessage());?> Vytvoř UPDATE dotaz s těmito parametry. Dotaz je vytvořen pro konkrétní DB (instance v proměnné $db 49

Metoda autoexecute Ještě větší zjednodušení. Kombinuje metody autoprepare a execute <?php $table_name = 'user'; $fields_values = array( 'name' => 'Fabien', 'country' => 'France' ); $res = $db->autoexecute($table_name, $fields_values, if (PEAR::isError($res)) {?> DB_AUTOQUERY_UPDATE, 'id = 1'); die($res->getmessage()); Vše v jednom, vytvoří dotaz a provede ho 50

Děkuji za pozornost MARTIN KLÍMA, XKLIMA@FEL.CVUT.CZ 51