602SQL-Úplná dokumentace Index  

Parametry prepared SQL příkazů

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.

Parametry SQL příkazu lze buď předat ve formě parametrů volání funkce wb_psql_execute, nebo lze hodnoty IN parametrů předat funkcí wb_psql_send_param a hodnoty OUT parametrů přečíst funkcí wb_psql_get_out_param.

V případě INOUT parametru musí být jeho hodnota předána do SQL příkazu (jako hodnoty IN parametrů) a zároveň musí (resp. může) být jeho hodnota přečtena (jako v případě OUT parametrů).

Konverze hodnot IN parametrů

Konverze PHP hodnoty NULL

Pro jakýkoliv typ IN parametru platí, že pokud bude jako jeho hodnota předána PHP hodnota NULL, pak bude SQL serveru předána SQL hodnota NULL odpovídajícího databázového typu.

Konverze ostatních PHP hodnot

typ IN parametru (db. typ)přípustné PHP hodnoty
BOOLEAN hodnoty typu boolean, resp. takové, které lze převést na tento PHP typ
TINYINT, SMALLINT, INTEGER, BIGINT hodnoty typu int, resp. takové, které lze převést na tento PHP typ; pokud hodnota přesahuje rozsah daného db. typu, bude vyvolána chyba
NUMERIC, DECIMAL, REAL hodnoty typu float, resp. takové, které lze převést na tento PHP typ; pokud hodnota přesahuje rozsah daného db. typu, bude vyvolána chyba
CHAR(N), CLOB hodnoty typu string, resp. takové, které lze převést na tento PHP typ
NCHAR(N), NCLOB

hodnoty typu string, resp. takové, které lze převést na tento PHP typ; navíc:

  • pokud je client encoding WB_ENC_ASCII, pak hodnota musí být ASCII stringem
  • pokud je client encoding WB_ENC_WIN1250, pak hodnota musí být stringem v kódování Windows CP 1250
  • pokud je client encoding WB_ENC_WIN1252, pak hodnota musí být stringem v kódování Windows CP 1252
  • pokud je client encoding WB_ENC_ISO_8859_2, pak hodnota musí být stringem v kódování ISO-8859-2
  • pokud je client encoding WB_ENC_UTF8, pak hodnota musí být UTF-8 stringem

předaná hodnota bude na SQL server odeslána až po její konverzi do kódování UCS-2, původní PHP hodnotu to ale neovlivní

DATE
  • hodnoty typu int: číslo bude bráno jako Unix time (časový okamžik, který je vzdálen daný počet sekund od Unix Epoch - 1.1.1970, 00:00 UTC) a den (datum), ve kterém tento časový okamžik leží, bude zkonvertován na SQL typ DATE
  • hodnoty typu string: řetězec musí být validním zápisem konstanty typu DATE dle požadavků funkce z 602SQL API Str2date
  • pokud budou předány hodnoty jiných PHP typů, bude vyvolána chyba
TIME

hodnota typu string, resp. taková hodnota, kterou lze na tento typ zkonvertovat; string musí být validním zápisem konstanty typu TIME dle požadavků funkce z 602SQL API Str2time

TIMESTAMP
  • hodnota typu int: číslo bude bráno jako Unix time a SQL serveru bude předána hodnota typu TIMESTAMP, která odpovídá stejnému časovému okamžiku
  • hodnota typu string: řetězec musí obsahovat validní zápis konstanty typu TIMESTAMP dle požadavků funkce z 602SQL API Str2timestamp
  • pokud budou předány hodnoty jiných PHP typů, bude vyvolána chyba

Konverze hodnot OUT parametrů

Hodnota NULL

Hodnota NULL bude vždy vrácena jako PHP hodnota NULL.

Ne-NULL hodnoty

typ OUT parametru (db. typ)PHP hodnota
BOOLEAN PHP typ boolean
celočíselné typy do velikosti 32 bitů tj. TINYINT, SMALLINT a INTEGER PHP typ int
BIGINT pokud lze hodnotu reprezentovat PHP typem int (který je 32-bitový), pak bude vrácena jako hodnota tohoto typu, jinak bude vrácena jako hodnota typu float, ale v tom případě pravděpodobně dojde ke ztrátě přesnosti čísla
NUMERIC, DECIMAL, REAL PHP typ float
CHAR(N), CLOB PHP typ string
NCHAR(N), NCLOB PHP typ string, přičemž vrácený string bude v kódování UTF-8
DATE PHP typ int, přičemž vrácené číslo bude přestavovat Unix time první sekundy (tj. času 00:00) toho dne, který je reprezentován hodnotou typu DATE
TIME PHP typ string, přičemž vrácený řetězec bude obsahovat zápis daného času
TIMESTAMP PHP typ int, přičemž vrácené číslo bude přestavovat Unix time časového okamžiku reprezentovaného danou hodnotou typu TIMESTAMP
BINARY(N), BLOB PHP typ string, přičemž každý bajt dané binární hodnoty bude reprezentován dvěma znaky, které jsou zápisem daného bajtu v hexadecimální číselné soustavě
např. bajt s ASCII kódem 32 (dekadicky) bude reprezentován podřetězcem "20", nebo bajt s ASCII kódem 13 (dekadicky) bude reprezentován podřetězcem "0d"