Databáze – modifikátory

Pomocí modifikátorů určíte typ proměnné, díky tomu ji může framework patřičně escapovat, aby tak zabránil SQL injection. Dále „obalujte“ názvy tabulek a sloupců do hranatých závorek, aby nedošlo ke kolizi s klíčovými slovy. Sql dotaz bude také přehlednější.

$row = db::fetch('select * from [table] where [id] = %i', $id);
# select * from `table` where `id` = 5

$row = db::fetch('select * from [table] where [title] = %s', "titlek s ' apostrofem");
# select * from `table` where `title` = 'titulek s \' apostrofem'

Díky modifikátorům bude tedy vaše databáze v bezpečí. Modifikátory uvádíme na místě, kde se proměnná má doplnit. Dané hodnoty uvádíme jako další argumenty volané funkce (query, fetch, fetchAll, fetchField, fetchPairs, prepare). Pokud vám vyhovuje více, když hodnoty budete uvádět neprodleně po jejich zápisu, můžete tak bez problému učinit.

db::fetch('select * from [table] where [id] = %i and [name] like %s', $id, $name);
# alternativně
db::fetch('select * from [table] where [id] = %i', $id, ' and [name] like %s', $name);

Přehled modifikátorů

Modifikátor Konstanta Význam Vstup Výstup
%r Db::RAW surový zápis sql dat    
%c Db::COLUMN jméno sloupce    
%s Db::STRING řetězec    
%bin Db::BINARY      
%i Db::INTEGER integer    
%f Db::FLOAT float    
%b Db::BOOL boolean    
%t Db::TIME time timestamp/výraz pro strtotime H:i:s
%d Db::DATE date timestamp/výraz pro strtotime Y-m-d
%dt Db::DATETIME datetime timestamp/výraz pro strtotime Y-m-d H:i:s
%set Db::SET set pole nebo řetězec hodnoty spojené čárkou
Pole
%a Db::A_ASSOC klic = hodnota   key1 = val1, key2 = val2
%l DB::A_LIST seznam hodnot   (val1, val2)
%v Db::A_VALUES (klice) VALUES (hodnoty)   (key1, key2) VALUES (val1, val2)
%m Db::A_MULTI_VALUES vícenásobný insert   (key, …) VALUES (val1, …), (val2, …), …

Mofikátory pro NULL

Může nastat situace, kdy předaný parametr může také nabývat hodnoty null. V tomto případě využijte upravené syntaxe: před modifikátor přidejte vykřičník.

$cat = null;
$posts = db::query('select * from [posts] where [category] = !%i', $cat);
# select * from `posts` where `category` = NULL

Modifikátory podmínky

Pomocí modifikátorů podmínky můžete jednoduše vytvořit svůj SQL dotaz. Framework zatím podporuje pouze %if a %end.

$query = db::query('select * from [table] %if', !empty($cat), ' where
[category] = %s', $cat, '%end limit 1');