602SQL-Úplná dokumentace Index  

Formát popisu klientských proměnných funkcí pro XML import a export

Tento popis se týká parametru hostvars funkcí wb_export_to_xml, wb_export_to_xml_buffer, wb_import_from_xml a wb_import_from_xml_buffer.

Tento parametr musí mít buď hodnotu NULL, pokud nechceme předávat popis žádné klientské proměnné (resp. v tomto případě nemusíme parametr hostvars při volání funkce vůbec uvádět), nebo musí být polem, jehož prvky mají následující strukturu:

Konverze hodnot parametrů

Před provedením přenosu dat se PHP hodnoty parametrů konvertují na hodnoty databázového typu, který je uveden v popisu parametru. Po přenosu dat se opačným směrem konvertují hodnoty výstupních parametrů.

Konverze hodnot vstupních parametrů

Konverze PHP hodnoty NULL

Pro jakýkoliv typ 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 parametrupřípustné PHP hodnoty
ATT_BOOLEAN hodnoty typu boolean, resp. takové, které lze převést na tento PHP typ
ATT_INT8, ATT_INT16, ATT_INT32, ATT_INT64 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
ATT_INT8, ATT_INT16, ATT_INT32, ATT_INT64"scale">0 hodnoty typu int, nebo float, resp. takové, které lze převést na tyto PHP typy; pokud hodnota přesahuje rozsah daného db. typu, bude vyvolána chyba
ATT_MONEY, ATT_FLOAT 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
ATT_STRING, ATT_TEXT hodnoty typu string, resp. takové, které lze převést na tento PHP typ
ATT_STRING, ATT_TEXT"wide_char"=TRUE

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í

ATT_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
ATT_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

ATT_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 výstupních parametrů

Hodnota NULL

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

Ne-NULL hodnoty

typ výstupního parametruPHP hodnota
ATT_BOOLEAN PHP typ boolean
celočíselné typy do velikosti 32 bitů, tj. ATT_INT8, ATT_INT16 a ATT_INT32 PHP typ int
ATT_INT64 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
celočíselné typy ATT_INT8, ATT_INT16, ATT_INT32 a ATT_INT64, které mají "scale">0 PHP typ float
ATT_MONEY, ATT_FLOAT PHP typ float
ATT_STRING, ATT_TEXT PHP typ string
ATT_STRING, ATT_TEXT"wide_char"=TRUE PHP typ string, přičemž vrácený string bude v kódování UTF-8
ATT_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
ATT_TIME PHP typ string, přičemž vrácený řetězec bude obsahovat zápis daného času
ATT_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
ATT_BINARY, ATT_NOSPEC 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"

Příklady použití

Příklad 1: Předání dvou vstupních klientských proměnných, první je typu INT, druhá je typu VARCHAR.

Pokud nemáme v DADu výstupní proměnnou, můžeme uvést hodnotu parametru hostvars jako konstantu typu pole.

wb_export_to_xml($connection,"*testdad","outfile.xml",NULL,
    array(
        // první proměnná se jmenuje cislo
        "cislo" => array(
            // je typu ATT_INT32, tj. INT
            "type" => ATT_INT32,
            // a její vstupní hodnota je 123456
            "value" => 123456
        ),
        // druhá proměnná má jméno retezec
        "retezec" => array(
            // je typu ATT_STRING, tj. VARCHAR
            "type" => ATT_STRING,
            // vstupní hodnota je "abcdefgh"
            "value" => "abcdefgh"
        )
    )
);

Příklad 2: Předání vstupně-výstupní klientské proměnné typu NCLOB.

V případě existence výstupní proměnné musíme hodnotu parametru hostvars zadat jako odkaz na proměnnou typu pole, jinak bychom nemohli po provedení funkce přečíst výstupní hodnotu klientské proměnné.

wb_set_client_encoding($connection, WB_ENC_UTF8);
$hostvars=array(
    // proměnná se jmenuje uniclob
    "uniclob" => array(
        // je typu ATT_TEXT
        "type" => ATT_TEXT,
        // a je to Unicode CLOB
        "wide_char" => TRUE,
        // vstupní hodnota je tento UTF-8 řetězec (editujeme v UTF-8)
        "value" => "Test s háčky.",
        // výstupní buffer bude mít velikost 500 Unicode znaků
        // pokud bychom velikost bufferu nepředepsali,
        // byl by tak velký, aby obsáhnul vstupní hodnotu,
        // tj. 13 znaků
        "length" => 500,
        // je to OUT proměnná
        "out" => TRUE
    )
);
wb_import_from_xml($connection,"*importdad","infile.xml",$hostvars);
// výstupní hodnotu klientské proměnné (řetězec v kódování UTF-8) přečteme takto
echo $hostvars["uniclob"]["value"];

Příklad 3: Předání vstupně-výstupní klientské proměnné typu NCLOB.

Pokud hodnoty vstupně-výstupních proměnných předáme v PHP proměnných, můžeme parametr hostvars uvést jako konstantu typu pole. Výstupní hodnoty klientských proměnných budou zapsány do odpovídajících PHP proměnných. Musíme ale v poli uvést REFERENCI na PHP proměnnou, jinak by se výstupní hodnota parametru zapsala ne do PHP proměnné, ale do pole (které by bylo vzápětí zničeno)!

// hodnotu klientské proměnné máme v PHP proměnné $uniclob_value
wb_import_from_xml($connection,"*importdad","infile.xml",
    array(
      // proměnná se jmenuje uniclob
      "uniclob" => array(
          // je typu ATT_CLOB
          "type" => ATT_CLOB,
          // a je to Unicode CLOB
          "wide_char" => TRUE,
          // vstupní hodnota je v PHP proměnné
          // proměnnou musíme předat referencí!!!
          "value" => &$uniclob_value,
          // výstupní buffer bude mít velikost 500 Unicode znaků
          "length" => 500,
          // je to OUT proměnná
          "out" => TRUE
      )
    )
);
// výstupní hodnota klientské proměnné (řetězec v kódování UTF-8) je v PHP proměnné
echo $uniclob_value;

Viz