|
![]() | 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 | ![]() |