PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

odbc_close_all> <odbc_autocommit
Last updated: Fri, 03 Oct 2008

view this page in

odbc_binmode

(PHP 4, PHP 5)

odbc_binmodeバイナリカラムデータを処理する

説明

bool odbc_binmode ( resource $result_id , int $mode )

バイナリカラムデータを処理できるようにします (関係するODBC SQL型: BINARY, VARBINARY, LONGVARBINARY)。

バイナリ SQL データが文字データに変換される時、ソースデータの 各バイト (8 ビット) は、2 つのアスキー文字で表現されます。 これらの文字は、16 進表現で数値をアスキー文字で表現したものです。 例えば、2 進数 000000001 は "01" に変換され、 11111111 は "FF" に変換されます。

LONGVARBINARY 処理
binmode longreadlen 結果
ODBC_BINMODE_PASSTHRU 0 通過
ODBC_BINMODE_RETURN 0 通過
ODBC_BINMODE_CONVERT 0 通過
ODBC_BINMODE_PASSTHRU 0 通過
ODBC_BINMODE_PASSTHRU >0 通過
ODBC_BINMODE_RETURN >0 そのまま返す
ODBC_BINMODE_CONVERT >0 char として返す

odbc_fetch_into() を使用した場合、 「通過」は空文字列が対応するカラムに返されることを意味します。

パラメータ

result_id

結果 ID。

result_id0 を指定した場合、 ここで設定した値は、新規の結果に関するデフォルト値として用いられます。

注意: longreadlen のデフォルト値は 4096 で、binmode のデフォルト値は ODBC_BINMODE_RETURN です。 バイナリロングカラムの処理は、odbc_longreadlen() の影響も受けます。

mode

mode には、以下の値が指定できます。

  • ODBC_BINMODE_PASSTHRU: BINARY データとして通過
  • ODBC_BINMODE_RETURN: そのまま返す
  • ODBC_BINMODE_CONVERT: char に変換し返す

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。



add a note add a note User Contributed Notes
odbc_binmode
mizmerize at yahoo dot com
11-Jan-2006 03:59
I am currently using an SQL Server 2000 used as a datasource for ODBC access, Testing PHP scripts from an Apache 2 server running on Windows 2000.

I was trying to get an image from the database using ODBC but the output always flushes automatically while I was just getting the result using odbc_result() function.

With this code, the picture automatically prints to the browser as soon as I hit odbc_result() (probably a bug, but bug reports aren't that easy to do).

<?php
  $connH
=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
   
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
    if (
$result) {                           
       
odbc_longreadlen($result, 131072);       
       
odbc_binmode($result,ODBC_BINMODE_PASSTHRU);                           
//upon calling this, the output flushes out to the browser... made me scratch       
$m_FValue=odbc_result($result, 1);
}
?>

...after 48 hours of scratching I finally made a work around, but by using a function in the bin2hex() function documentation...

<?php
     
function hex2bin($data){
      
$len = strlen($data);
       return
pack("H" . $len, $data);
    }

   
   
$connH=odbc_pconnect("ImageDB","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
   
$result=odbc_exec($connH, "SELECT Emp_Image FROM tblEmployeePics WHERE Emp_Id=547");
    if (
$result) {                           
       
odbc_longreadlen($result, 131072);       
       
odbc_binmode($result,ODBC_BINMODE_CONVERT);                           
       
$m_FValue=odbc_result($result, 1);
       
$out=hex2bin($m_FValue);
    }
?>

The trick was to convert the output into hex by changing odbc_binmode to  ODBC_BINMODE_CONVERT and using a handy function to convert it back to binary in order to facilitate manipulation of its size, depth etc...
andrea dot galli at acotel dot com
28-Apr-2003 05:27
Example: retrieve image from database.

<?php

   $Link_ID
= odbc_connect("DSN", "user", "pass");
  
$Query_ID = odbc_exec($Link_ID, "SELECT picture FROM categories");

  
// change to ODBC_BINMODE_CONVERT for comparison

  
odbc_binmode($Query_ID, ODBC_BINMODE_RETURN);

  
$Images = odbc_result($Query_ID, 1);

   echo
$Images;

?>

odbc_close_all> <odbc_autocommit
Last updated: Fri, 03 Oct 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites