LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

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

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ů

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

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ář

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

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

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