|
|
| wb_lob_truncate | Manipulace s typy proměnné délky | wb_get_lob_mode |
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 0 až N, 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).
Při úspěchu vrátí TRUE, v případě chyby vrátí FALSE.
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ř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);
| wb_lob_truncate | Manipulace s typy proměnné délky | wb_get_lob_mode |