Nespletl jsem si nadpis, nechci psát spíš o používání databází v PHP? Opravdu ne, článek je skutečně o tom, jak se dá používat PHP v jazyce SQL, klidně i mimo webové aplikace.
Nejjednodušší je situace u SQLite v PHP. Protože se nejedná o databázový server, ale o embedovanou databázi, je i její integrace s mateřským prostředím přímočařejší. K dispozici je funkce sqlite_create_function, která z PHP funkce vytvoří SQLite funkci, a sqlite_create_aggregate, která stejně jednoduše z iterační a ukončovací PHP funkce vytvoří agregační SQLite funkci. Předávání parametrů i návratové hodnoty je přímočaré.
U MySQL je situace složitější. Existuje knihovna myphp, pomocí které se dá PHP v MySQL zprovoznit. Nutná je navíc nestandardní kompilace PHP a povolení nahrávání knihoven v MySQL. Po zpřístupnění PHP v MySQL kódem CREATE FUNCTION PHP RETURNS STRING SONAME 'myphp.so'
se PHP volá takhle: SELECT PHP('return $argv[1] * $argv[2];', 4, 5)
. PHP kód tak může být uložen přímo v databázi, což sice znamená ještě těsnější integraci, na druhou stranu ale těžší správu kódu. Více informací o této knihovně je k dispozici v prezentaci od jejího autora.
K čemu se tohle všechno vlastně dá použít? Čas od času mi v SQL chybí nějaká funkce (např. obdoba preg_replace) nebo agregační funkce, která by se tímto způsobem dala implementovat. Kód by pak byl mnohem elegantnější než získání všech dat z databáze a jejich následné zpracování v PHP, o práci přímo v databázové konzoli nemluvě. Kdyby integrace s MySQL byla stejně jednoduchá jako u SQLite, tak bych tento mechanismus možná čas od času využil, takhle to s největším pravděpodobností nechám plavat.
Diskuse je zrušena z důvodu spamu.