602SQL-Úplná dokumentace Index  

Prepared SQL funkce

SQL příkaz můžeme pomocí PHP modulu vykonat buď "tradiční" funkcí wb_exec, nebo můžeme použít sadu funkcí pro přípravu SQL příkazů a jejich následné provádění (tyto funkce budeme zkráceně nazývat PSQL funkce).

Porovnání s prováděním SQL příkazů pomocí funkce wb_exec

První výhodou oproti wb_exec je možnost opakovaně provádět připravený (zkompilovaný) SQL příkaz.

Druhou výhodou je lepší kontrola nad parametry předávanými do SQL příkazu při jeho provádění. Při přípravě SQL příkazu totiž SQL server mimo jiné oznámí PHP modulu jím očekávané typy všech parametrů, které se vyskytují v SQL příkazu. Díky tomu může PHP modul při předávání IN parametrů SQL serveru a při čtení OUT parametrů z SQL serveru daleko přesněji zkonvertovat PHP hodnotu, která má být odeslána jako hodnota IN parametru, a zkonvertovat přečtenou hodnotu OUT parametru do nějaké PHP proměnné. Těmito funkcemi lze např. nastavit hodnotu jakéhokoliv IN parametru na NULL, což pomocí parametrů SQL příkazu prováděného funkcí wb_exec nelze.

Nevýhodou je nutnost volat nejméně dvě funkce, jednu pro přípravu SQL příkazu, druhou pro jeho provedení.

Použití PSQL funkcí

Základní PSQL funkce

Základními funkcemi jsou wb_psql_prepare a wb_psql_execute. Funkce wb_psql_prepare připraví (zkompiluje) SQL příkaz a vrátí jeho resource handle (identifikátor připraveného SQL příkazu, který se předává do dalších PSQL funkcí, které mají manipulovat s tímto SQL příkazem). Funkce wb_psql_execute provede připravený SQL příkaz. Už nepotřebný prepared SQL příkaz je možno zavřít (uvolnit zdroje alokované k provedení tohoto SQL příkazu) pomocí standardní funkce wb_close. Není však nutno tuto funkci volat, protože PHP rozpozná a automaticky zavře už nepoužívaný prepared SQL příkaz (podobně, jako rozpozná a zavře např. už nepoužívaný kurzor).

Příklad: provedení SQL příkazu, který neobsahuje žádné parametry

$psql_handle=wb_psql_prepare($connection,"DELETE FROM Test_table;");
wb_psql_execute($psql_handle);
wb_close($psql_handle);  

Předávání hodnot parametrů - varianta 1

Parametry označujeme v SQL příkazu znakem otazník ? (na rozdíl od parametrů v SQL příkazech prováděných funkcí wb_exec). Parametry, z hlediska směru přenosu hodnoty, mohou být IN, OUT i INOUT. Seznam parametrů můžeme předat funkci wb_psql_execute (existuje i další možnost, jak předávat hodnoty parametrů). Hodnoty IN a INOUT parametrů se předají SQL serveru, SQL příkaz se provede a hodnoty OUT a INOUT parametrů se přečtou a zapíší do zadaných PHP proměnných.

Příklad: SQL příkaz s jedním IN a jedním OUT parametrem. Hodnotu IN parametru zadáme jako konstantu, hodnotu OUT parametru požadujeme zapsat do PHP proměnné $nazev_var. PHP proměnnou, do které chceme zkopírovat hodnotu OUT parametru, musíme nějak (jakkoliv) zinicializovat (přiřadit do ní jakoukoliv hodnotu, aby proměnná existovala ještě před provedením funkce wb_psql_execute).

$psql_handle=wb_psql_prepare($connection,"SELECT nazev INTO ? FROM Test_table WHERE id=?");
$nazev_var=null;
wb_psql_execute($psql_handle,$nazev_var,4); 

Předávání hodnot parametrů - varianta 2

Parametry SQL příkazu lze předat také samostatnými funkcemi. Narozdíl od předešlého způsobu lze takto předat hodnotu dlouhých IN parametrů po částech a přečíst hodnotu OUT parametrů po částech. To je významné zejména pro parametry typu BLOB a CLOB.

Příklad: Provedení SQL příkazu s předáním hodnot parametrů pomocí samostatných PSQL funkcí.

$psql_handle=wb_psql_prepare($connection,"SELECT nazev INTO ? FROM Test_table WHERE id=?");
wb_psql_send_param($psql_handle,1,4);
wb_psql_execute($psql_handle);
$nazev_var=wb_psql_get_out_param($psql_handle,0);  

Další informace

Podrobnosti o používání PSQL funkcí naleznete v popisu těchto funkcí, tj.:

Popis předávání hodnot parametrů prepared SQL příkazu mezi PHP skriptem a SQL serverem naleznete na stránce o předávání parametrů prepared SQL příkazů.

Seznam subsekcí: