Database Abstraction Layer je komponenta, která zpomalí aplikaci, zvýší její hardwarové nároky a zkomplikuje programátorům přístup k databázi. To vše výměnou za iluzi, že by aplikace mohla fungovat i pod jiným databázovým strojem, než pro který byla původně vyvíjena.

Toliko definice DAL (na Wikipedii mají jinší). A teď několik praktických ukázek.

ADOdb

Nejslavnější PéHáPéčková DAL si říká ADOdb. Po přilinkování cca 400kB kódu k vaší aplikaci můžete dát sbohem nudným SQL příkazům, jako je

UPDATE `table` SET lastname='Jones'
WHERE lastname LIKE 'Sm%'

a nahradit je vzrušujícím zápisem

$record["lastname"] = "Jones";
$conn->AutoExecute(
	$conn->nameQuote.'table'.$conn->nameQuote,
	$record, 'UPDATE', "lastname LIKE 'Sm%'");

To není má zběsilá fantazie, to cituji jeden svěží příklad z dokumentace. Zvládnout ADOdb tedy není nic složitého, stačí se jen naučit novou syntaxi a odměnou bude tento přehledný zápis, kde snad ani nelze udělat chybičku. Pravda, zjištění, že uvedené hned z několika důvodů nebude fungovat třeba v MSSQL, nás dvakrát nepotěší, ale hlavně že je mír.

PEAR DB

Tak teď jsem trošku na rozpacích – není náhodou tou nejslavnější DAL pro PHP právě tato?

PEAR DB je od své kolegyně o poznání štíhlejší (140kB), nicméně pro svůj chod vyžaduje ještě knihovnu PEAR. Čím nás za svou přízeň odmění? Především šikovným zapouzdřením (nemyšleno ironicky, protentokrát ne) všech důležitých funkcí pro práci s databází a několika užitečnými drobnostmi navíc.

Zajímavé je například vkládání parametrů do SQL příkazů:

$db->query('INSERT INTO numbers
  VALUES (?, ?, ?)', array(1, 'one', 'en'));

Leč při větším počtu parametrů je tato technika spíše kontraproduktivní. Shrnuto podtrženo: PEAR DB je zvládnutá rutina bez geniálních nápadů.

PDO

Dámy a pánové, o své místo na slunci se uchází novinka jménem PDO, nedílná součást PHP od verze 5.1. Funkčně se velice podobá PEAR DB, avšak obejde se bez linkování stovek kilobajtů (pomalého) kódu. Ale ptám se, je důvod k jásotu?

  1. zajistí alespoň základní přenositelnost mezi databázovými stroji?
  2. zjednoduší programátorům zápis SQL příkazů?

Obávám se, že nikoliv. Nebo snad znáte způsob, kterak snadno zapsat SQL příkaz, jenž by se pro MySQL resp. MS Access reprodukoval takto:

INSERT INTO `table` (`date`, `text`) VALUES ('2000-12-02', 'say: \'hello\'');

INSERT INTO [table] ([date], [text]) VALUES (#12/2/2000#, 'say: ''hello''');

Pokračování včetně jednoho řešení!