LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP a SQL - EZ_SQL (2)

EZ_SQL je praktická knihovna pro zpřístupnění SQL databáze z PHP. Uložení, aktualizace, mazání dat a práce s chybami, neboli pokračování z minula.

14.2.2005 15:00 | MaReK Olšavský | Články autora | přečteno 9915×

Minule jsme si udělali základní seznámení s knihovnou Ez_slq.php včetně výběru dat z databáze. V tomto díle bude vysvětlena funkce k zadání ostatních (neSELECT) dotazů a práci s chybami.

Ostatní dotazy

Kromě výběru dat skoro pro veškerou ostatní funkčnost nad SQL databází použijete funkci $db->query(dotaz);, takže například pro vymazání uživatelů, kteří jsou nastaveni jako rescrticted='yes' použijete $db->query('DELETE FROM '.DBPREFIX.'users WHERE restricted=\'yes\'');. Návratová hodnota funkce je typu bool, tzn. je-li příkaz (DELETE, UPDATE, INSERT, ...) proveden úspěšně, je nastavena na 'True' a jestliže je záporná, je 'False'. Pokud existuje i nějaký další výsledek provedeného dotazu, než je (ne)úspěšnost, je tento nacacheován a je dostupný pomocí další funkce.

Další příklady

$db->query('UPDATE '.DBPREFIX.'emplyes SET plat=plat+1500 WHERE plat<23000');
$db->query('INSERT INTO '.DBPREFIX.'log(lastlogin, ip, id_user) VALUES ('...')');

Prvním dotazem zvedáme plat všem, kteří mají méně, než 23000,- o 1500,- a druhým vložíme záznam do logovací tabulky, kdy se přihlásil některý z uživatelů.

Představte si situaci, že zákazník si na jednoduchém redakčním systému přeje vkládat obrázky, ideální je ukládání pod jejich původními adresáři, ale protože není ve Vašich silách zajistit, že každý vložený obrázek bude mít jedinečný název (a zákazník zapomene za 2 týdny, cože to vlastně vložil), může být jednou z cest dynamické tvoření adresářů na serveru. Hlavní adresář pro ukládání těchto dat může být například artimg (jako articles images) a v něm budete twořit podadresáře pro uložení obrázků k článům (přes DOM model stránky si zajistíte políček na ně, kolik si zrovna uživatel vzpomene) s logikou art###, kde ### je ve významu id posledního vloženého řádku.

K získání toho ### jste, pokud jste používali MySQL, použili funkci MySQL_Insert_Id();, v případě PostgreSQL funkci pg_last_oid();, atd. Pokud použijete Ez_sql, máte k dispozici proměnnou $db->insert_id, která je vždy po uložení data automaticky nastavena. Jedná se o hodnotu, která je v tabulce pod typem (big)serial (nebo auto_increment pro MySQListy).

V tomto případě zvolíte způsob, že budete mít tabulku článků a druhou tabulku, kde budete mít názvy obrázků (ten kód co tu bude nebude nejhezčí, ale berte to jako návrh možného řešení), někdo teď namítne, proč je rovnou nenakopírovat do databáze, ale to je řešení, proti kterému mám docela silné výhrady. Ukázka uložení (nekompletní):

//ulozeni clanku na server
$db->query('INSERT INTO '.DBPREFIX.'articles (title, content, visible, lasedit)'.
  'VALUES('.$_POST['title'].'\', \''.$_POST['content'].'\', \''.
  $_POST['visible'].'\', NOW())');
//vytvoreni adresare
$myDir='./../artimg/art'.$db->insert_id.'/';
mkdir($myDir,0777);
//prekopirovani obrazku na server a jejich ulozeni do db reseno jen pro jeden
move_uploaded_file($_FILES['pic']['tmp_name'],$myDir.$_FILES['pic']['name']);
$db->query('INSERT INTO '.DBPREFIX.'artpic(id_art, name) VALUES (\''.
  $db->insert_id.'\', \''.$_FILES['pic']['name'].'\'');

Sloupeček id_art používam jako referenci na článeček, ke kterému obrazák patří. Pokud chci zobrazit článek s nějakým znamým id (poslaným metodou GET přes URL), tak použiji 2 dotazy:

$art=$db->get_row('SELECT * FROM '.DBPREFIX.'articles WHERE visible=\'yes\' '.
  'AND id=\''.$_GET['id'].'\'', ARRAY_A);
$pics=$db->get_results('SELECT * FROM '.DBPREFIX.'artpic WHERE id_art=\''.
  $_GET['id'].'\'');

Předpokládám, že nemusím ukazovat, jak obrázek dostanete na stránku.

Užitečné proměnné jsou $db->num_rows, kam je přiřazen počet řádků, které jste získali po provedení SELECTu a $db->rows_affected, ve které bude uložen počet záznamů (nebo chcete-li řádků) oblivněných pomocí INSERT, UPDATE, DELETE. K obojímu existují ekvivalentí funkce v PHP, ale je snažší použít toto, protože jak jsem napsal minule, výhodou je, že pro různé databáze mám stejné funkce a nemusím si jich pamatovat x různých, nebo je hledat v nápovědách a manuálech.

Další funkcí, která se může ukázat jako docela užitečná je $db->debug();, která Vám vytiskne sql dotaz a zároveň data, která jste tímto dotazem získali (pokud nějaké byly, takže INSERT a UPDATE Vám teoreticky nic rozumného zpět neposkytnou). Zkuste si třeba následující:

$art=$db->get_row('SELECT * FROM '.DBPREFIX.'articles WHERE visible=\'yes\''
  , ARRAY_A);
$db->debug();

A uvidíte tabulku se všemi viditelnými článečky, které máte na serveru uloženy. Tato funkce Vám může být velmi nápomocna pří ladění.

Funkce $db->vardump() Vám poslouží k zobrazení obsahu a struktury proměnné. Kromě obsahu a typu dostanete zobrazený poslední SQL dotaz, který byl proveden, jakou funkcí (zde zjistíte, že vlastně vše se vykonává pomocí $db->query() s následným odchycením dat) a počet řádků dat.

Pokud tvoříte nějakou rozsáhlejší aplikaci, bude se Vám velice hodit dvojice příkazů $db->hide_errors() a $db->show_errors(), kterými přepneme, zda-li chceme zobrazovat chyby SQL (připojení k serveru, výběr databáze, chyba v dotazu, ...), nebo ne. Defaultní nastavení je takové, že se chyby zobrazují, což je sice výborné, dokud tvoříte, ale doporučuji vypnout (třeba v init.php), pokud zakázku odevzdáváte zákazníkovi, protože toto zobrazení chyb je dosti detailní a nedobře působící na návštěvníky stránek, které jste napsali.

Pokud máte stránky, kde je v podstatě vše v SQL databázi, je vhodné udělat i podstránečku s omluvou, na kterou se přesměrujete v případě, že nebude fungovat SQL server, nebo nastane jakákoliv jiná chyba v práci s databází. K tomu, abyste zjistili, že je něco v nepořádku Vám poslouží pole $EZSQL_ERROR, které je-li prázdné, proběhlo vše v pořádku a je-li v něm cokoliv, jednako se můžete přesměrovat na stránku s omluvou a zároveň s tímto bych doporučoval uložit chyby do nějakého errorlog.txt, nebo rovnou jejich odeslání na mail administrátora. $EZSQL_ERROR je dvou rozměrné pole, ve kterém počet řádků odpovídá počtu chyb a sloupečky query, error_str a error_no poskytují popis chyby. V trochu nehezké formě si můžete toto pole zobrazit pomocí $db->vardump($EZSQL_ERROR).

Pokud nemáte řešeno ošetření vstupů z formuláře pomocí vlastní knihovny, nebo alespoň nepoužijete php funkci addslashes(), knihovna EZ_Sql Vám poskytuje funkci $db->escape(string), která rozumě nahradí potenciálně nebezpečné znaky ve vstupech. Pro použití alespoň tohoto mluví nutnost mít aplikace alespoň nějakým způsobem robusní a odolné vůči SQL Injections.

Závěrem

V tomto krátkém dvojdílném článečku jsem se pokusil Vám představit zajímavou knihovnu, která usnadní vývoj PHP aplikací nad databázemi nejen začátečníkům, ale i pokročilým (pokud si něco lepšího nenapíšou sami). Knihovna skýtá i další funkce (změna databáze, získání sloupečků, ...), které jsem tu nepopisoval, ale najdete je v dokumentaci.

Jelikož WWW stránky poměrně aktivně programuji, mohu Vám předem přislíbit další članečky, ve kterých se podíváme na zajímavé knihovny pro použití v projektech, ale nebude se jednat jen o PHP projekty, ale budeme zasaženi i JavaScriptem.

Verze pro tisk

pridej.cz

 

DISKUZE

Pěkné 14.2.2005 17:49 Petr Zajíc
L Re: Pěkné 14.2.2005 18:39 MaReK Olšavský
  L Re: Pěkné 14.2.2005 20:07 Petr Zajíc
    L Re: Pěkné 14.2.2005 22:37 MaReK Olšavský
Skeptik 14.2.2005 19:05 Ritchie
  |- Re: Skeptik 14.2.2005 20:09 Petr Zajíc
  | L Re: Skeptik 14.2.2005 20:54 Johann von Nepomuk
  |   |- Re: Skeptik 14.2.2005 22:33 MaReK Olšavský
  |   | L Re: Skeptik 14.2.2005 23:33 Johann von Nepomuk
  |   |   L Re: Skeptik 15.2.2005 07:01 MaReK Olšavský
  |   L Re: Skeptik 14.2.2005 22:39 Petr Zajíc
  |     L Re: Skeptik 14.2.2005 22:40 Petr Zajíc
  L Re: Skeptik 14.2.2005 22:25 MaReK Olšavský
    L Re: Skeptik 14.2.2005 23:49 Ritchie
      L Re: Skeptik 15.2.2005 07:11 MaReK Olšavský
        L Re: Skeptik 15.2.2005 15:21 Ritchie




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze