Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

obsahuje podprahová sdělení

Závěrem dibitýdne...

…tu mám ještě několik novinek. Především, nyní je možné do řetězce zapsat více modifikátorů najednou a teprve poté uvést jejich hodnoty:

dibi::query('
SELECT * FROM [table]
WHERE id = %i AND added > %d', $id, $time
);

Tímto se z modifikátorů stávají takové chytré „placeholders“. Už ani nemusí být umístěny zcela na konci řetězce.

Zároveň zavádím několik nových modifikátorů:

  • %ex pro expanzi pole do argumentů (Rubysté znají jako *[1,2,3])
  • %or a %and před polem spojí jeho prvky s oddělovačem ‚AND‘ nebo ‚OR‘
  • %lmt a %ofs pro přenositelné a možná snadnější nastavení LIMITOFFSET

Příklady použití:

$where[] = '[age] > 20';
$where[] = '[email] IS NOT NULL';
dibi::query('SELECT * FROM [table] WHERE %and', $where);
// SELECT * FROM [table] WHERE [age] > 20 AND [email] IS NOT NULL

nebo také

$where['age'] = 20;
$where['email'] = 'franta@example.com';
dibi::query('SELECT * FROM [table] WHERE %and', $where);
// SELECT * FROM [table] WHERE [age]=20 AND [email]='franta@example.com'

Limity a ofsety:

// with limit = 30, offset = 90
dibi::query('SELECT * FROM [products] %lmt %ofs', 30, 90);
// SELECT * FROM [products] LIMIT 30 OFFSET 90

// with offset = 100
dibi::query('SELECT * FROM [products] %ofs', 100);
// pro SQLite:
// SELECT * FROM [products] LIMIT -1 OFFSET 100
// pro MySQL:
// SELECT * FROM [products] LIMIT 18446744073709551615 OFFSET 100
// pro PostgreSQL:
// SELECT * FROM [products] OFFSET 100

Funkčnost modifikátorů %and & %or považujte za experimentální. Očekávám vaše připomínky a podle nich ji případně upravím. Jinak změny si vyžádaly větší zásah do zdrojového kódu dibi-překladače a ačkoliv jsem všechno velmi důkladně otestoval, buďte při nasazování pozorní.

Karma body: 17. Líbil se vám článek?

Komentáře » přidat

  1. avatar [1] Milan Svoboda: nový

    Zajímalo by mne, zda je možno kombinovat zadání where podmínek takto

    $where[] = '[age] > 20';
    $where['email'] = 'franta@example.com';

    a ještě jedna věc jak by se kombinovalo ve where podmínce AND a OR, když potřebuju trochu složitější podmínky

    Posláno 18. 1. 2008 v 9.05 | Odpovědět
    Na komentář reagoval [4] Stalker
  2. [2] Taurus: nový

    V prvním větě posledního odstavce máš „promile“or místo „procento“or…
    Jinak pěkný, zvlášť query ve stylu printf :-)

    Posláno 18. 1. 2008 v 9.29 | Odpovědět
  3. [3] Šmoula: nový

    Šikla by se mi v dibi funkce, která takto hezky poskládaný řetězec dotazu vrátí jako string, nic víc, nic miň.

    Posláno 18. 1. 2008 v 9.43 | Odpovědět
    Na komentář reagoval [16] marek
  4. [4] Stalker: nový

    [1] Milan Svoboda: Tiež by ma zaujímali tie zložitejšie podmienky. Že by nejaké vnorené polia?

    PS: Ten faraón sa podaril ;)

    Posláno 18. 1. 2008 v 10.44 | Odpovědět
  5. [5] Damien: nový

    Mě tak napadá, co takhle pro dibi udělat Wiki? ;)

    Posláno 18. 1. 2008 v 11.02 | Odpovědět
    Na komentář reagoval [6] Arcao
  6. avatar [6] Arcao: nový

    [5] Damien: Souhlas, přeci jenom je lepší se hrabat ve Wiki, než hledat to v nějakých zalezlých spotech.

    Posláno 18. 1. 2008 v 11.44 | Odpovědět
  7. avatar [7] papi: nový

    Ta wiki by určitě bodla. Bylo by to přehlednější. Nicméně bych občas uvítal i trochu složitější příklady dotazů. Přeji hodně zdarů, jde to dobrým směrem.

    Posláno 18. 1. 2008 ve 12.26 | Odpovědět
  8. [8] Damien: nový

    Na googlecode ta WiKi k projektu je, stačí ji rozchodit ;)

    Posláno 18. 1. 2008 v 16.32 | Odpovědět
  9. avatar [9] Techi: nový

    Mě prostě připadá dibi jako takový pseudoframework, kde se autor potřebuje pochlubit (nic ve zlém), co se mu povedlo vymyslet a napodobit z jiných frameworků
    A hromada začínajících programátorů jenom hltá a uznale kývá hlavou. Ale proč ne, aspoň se něco naučí.
    Co mi chybí je vývoj více lidí a nějaký viditelný progress.
    Zkrátka se mi zdá zbytečné vytvářet další framework, když jich je několik velmi známých a prověřených jako symfony, cake a kralující Zend.
    (Autor komentáře je členem ZF komunity :o] )

    Posláno 18. 1. 2008 ve 20.38 | Odpovědět
    Na komentář reagoval [10] Jan Škrášek
    Na komentář reagoval [11] al
    Na komentář reagoval [13] David Grudl
  10. avatar [10] Jan Škrášek: nový

    [9] Techi:

    • heh, tak dibi rozhodně není framework, to už spíš nette, ne?
    • progress? podle toho ty poznáváš, že je něco kvalitní
    • kdo tu kývá?
    • zbytečné? to je spíš asi napsaní tvého komentáře :D

    nic ve zlom ;)

    Posláno 18. 1. 2008 ve 20.59 | Odpovědět
  11. [11] al: nový

    [9] Techi: Nevim jestli a jak moc pozorne sledujete vyvoj Nette, ale ja osobne jsem si zadneho chlubeni nevsiml. Ceho jsem si ale vsiml hned, je kvalita kodu a hlavne kvalita myslenky se kterou to dgx pise. Pokud by tedy chtel, tak se rozhodne cim chlubit ma a my ostatni mu muzeme byt vdecni, ze se s nami o tyto veci podeli (rozdeli).

    Posláno 18. 1. 2008 ve 21.38 | Odpovědět
  12. avatar [12] Whitek: nový

    diky za or a and (ja si je v nouzi napsal do verze 0.6e sam, ale mam to radeji z „vyssi moci“ :-) ).

    Posláno 18. 1. 2008 ve 22.28 | Odpovědět
  13. avatar [13] David Grudl: nový

    [9] Techi: výborně, hledám nějakého zastánce, který žije a dýchá jen pro ten jediný Zend Framework, a se kterým bych si to mohl „rozdat“. Úkolem by bylo napsat jednoduchou totožnou aplikaci, každý v tom svém prostředí. Hned bude jasno, kdo drží trumfy a má setsakramentsky navrch :-)

    Posláno 19. 1. 2008 ve 2.09 | Odpovědět
    Na komentář reagoval [14] Tomik
    Na komentář reagoval [20] veena
  14. avatar [14] Tomik: nový

    [13] David Grudl: To vůbec není špatný nápad. Už jsi něco naznačil na první PHP konferenci, že bys chtěl něco podobného udělat. Jsem pro! Určitě by to bylo mnohem relevantnější měřítko něž nějaký „progress“. :-)

    P.S.: Abych nebyl špatně pochopen, neovládám Zend natolik, abych se Ti s ním stavil do cesty, ale pokud by se někdo rozhodl si to s Tebou a nette rozdat, určitě bych tu akci podporoval! :-)

    Posláno 19. 1. 2008 v 10.34 | Odpovědět
    Na komentář reagoval [15] CZNeo
  15. avatar [15] CZNeo: nový

    [14] Tomik: doba pokročila, nyní si samci budou přeměřovat dobu zpracování a délku skriptů

    Posláno 19. 1. 2008 v 11.43 | Odpovědět
  16. avatar [16] marek: nový

    [3] Šmoula: mno tak poslední koment mi tu byl smazán, ale našel jsem to jako dibi::test()

    Posláno 19. 1. 2008 ve 14.04 | Odpovědět
    Na komentář reagoval [17] David Grudl
  17. avatar [17] David Grudl: nový

    [16] marek: houby smazán, první odeslání je jenom náhled. Kolik lidí si pak myslí, že jim mažu komentáře, když je ve skutečnosti vůbec neodeslali…

    Posláno 19. 1. 2008 ve 14.41 | Odpovědět
    Na komentář reagoval [18] marek
  18. avatar [18] marek: nový

    [17] David Grudl: já vím, ale asi jsem tupec :) omlouvám se…

    Posláno 19. 1. 2008 v 16.30 | Odpovědět
    Na komentář reagoval [19] David Grudl
  19. avatar [19] David Grudl: nový

    [18] marek: mně se to už stalo taky. To nebyla výtka, jen zamyšlení.

    Posláno 19. 1. 2008 ve 23.49 | Odpovědět
  20. [20] veena: nový

    [13] David Grudl:
    chlapi pozor dáváte mi námět na téma další php konference ;-)

    Posláno 20. 1. 2008 v 0.15 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

La Trine © 2004, 2008 David Grudl – o webu
provozuje Pachollini.

Jakékoliv užití obsahu, včetně převzetí článků nebo jejich částí, je bez předchozího písemného svolení autora zakázáno.

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.