602SQL-Úplná dokumentace Index  

wb_lob_write

PHP

boolean wb_lob_write(resource lob, integer offset, integer size, string data)


Parametry

lob
Otevřený LOB, tj. v módu WB_LOBMODE_RESOURCE získaný výsledek volání funkce wb_result, nebo jeden z prvků pole získaného voláním funkce wb_fetch_into.
offset
Začátek úseku v LOBu, který bude přepsán stringem data. Údaj se zadává ve znacích.
size
Velikost dat, která budou zapsána do LOBu. Údaj se zadává ve znacích.
data
Řetězec obsahující data, která se mají zapsat do LOBu.


Popis

Přepíše úsek LOBu lob od offset-tého znaku (první znak LOBu má offset=0) daty ze stringu data o velikosti size znaků. Pokud je size==0, pak se zapíše celý obsah stringu data (až do koncového znaku s ASCII kódem 0); tuto volbu není rozumné používat pro BLOB, protože binární data velmi často obsahují také znaky s kódem 0.

Co jsou znaky:

Povolený rozsah hodnoty offset je 0N, kde N je délka hodnoty LOBu před provedením wb_lob_write. Přitom v případě offset==N se hodnota stringu data (nebo její část) připojí za stávající hodnotu LOBu (tj. nebude přepsán žádný znak původní hodnoty LOBu), zatímco ve všech ostatních případech dojde k přepisu alespoň jednoho znaku z původní hodnoty LOBu.

V případě zápisu do CLOBů a BLOBů musí být client_encoding=WB_ENC_ASCII, nebo muí být nastaveno jiné kódování s velikostí znaku jeden bajt (viz. wb_set_client_encoding), v data musí být ASCII řetězec a parametr size udává počet jednobajtových znaků, které mají být zapsány do LOBu. V případě zápisu do NCLOBů může být kódování řetězců na straně klienta nastaveno jakkoliv, protože PHP modul vždy před zápisem převede řetězec z daného kódování do kódování UCS-2. V parametru data musí být řetězec v daném kódování a parametr size udává počet znaků, které mají být zapsány do NCLOBu (přitom znakem se míní znak v daném klientském kódování, tj. např. pro kódování WB_ENC_UTF8 to jsou UTF-8 znaky).



Návratová hodnota

Při úspěchu vrátí TRUE, v případě chyby vrátí FALSE.



Příklad

Zapsání obsahu souboru do BLOBu do nového záznamu:

wb_exec($conn,"INSERT INTO Files_table(filename) VALUES($filename)")
  or die("Nelze vytvořit záznam.");
$cur=wb_exec($conn,"SELECT content FROM Files_table WHERE filename=$filename")
  or die("Nelze otevřít kurzor.");
wb_fetch_row($cur) or die("Neexistuje záznam.");
wb_set_lob_mode($cur,WB_LOBMODE_RESOURCE);
$lob=wb_result($cur,1) or die("Nelze otevřít LOB.");
$offset=0;
$handle=fopen($filename,"rb");
do {
   $data=fread($handle, 8192);
   $datalen=strlen($data);
   if( $datalen==0 ) { break; }
   wb_lob_write($lob,$offset,$datalen,$data) or break;
   $offset+=$datalen;
} while(true);
fclose($handle);
wb_close($lob);
wb_close($cur);


Příklad

Připsání řetězce na konec obsahu NCLOBu:

$cursor=wb_exec($connection,"SELECT nclob_column FROM Unicode_table WHERE id=1")
  or die("Nelze otevřít kurzor.");
wb_set_lob_mode($cursor,WB_LOBMODE_RESOURCE);
wb_fetch_into($cursor,$buff) or die("Záznam neexistuje.");
// předpokládejme, že v proměnné $str je UTF-8 string
wb_set_client_encoding($connection, WB_ENC_UTF8);
wb_lob_write($buff["NCLOB_COLUMN"],wb_lob_length($buff["NCLOB_COLUMN"]),0,$str);
// předpokládejme, že v proměnné $str_iso je řetězec v ISO-8859-2
wb_set_client_encoding($connection, WB_ENC_ISO_8859_2);
wb_lob_write($buff["NCLOB_COLUMN"],wb_lob_length($buff["NCLOB_COLUMN"]),0,$str_iso);
wb_close($buff["NCLOB_COLUMN"]);
wb_close($cursor);    

Viz