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 10229×

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ů

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

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

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

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