update pague now
PHP 8.5.2 Released!

odbc_binmode

(PHP 4, PHP 5, PHP 7, PHP 8)

odbc_binmode Handling of binary column data

Description

odbc_binmode ( Odbc\Result $statement , int $mode ): true

Controls handling of binary column data. ODBC SQL types affected are BINARY , VARBINARY , and LONGVARBINARY . The default mode can be set using the uodbc.defaultbinmode php.ini directive.

When binary SQL data is converted to character C data ( ODBC_BINMODE_CONVERT ), each byte (8 bits) of source data is represented as two ASCII characters. These characters are the ASCII character representation of the number in its hexadecimal form. For example, a binary 00000001 is converted to "01" and a binary 11111111 is converted to "FF" .

While the handling of BINARY and VARBINARY columns only depend on the binmode, the handling of LONGVARBINARY columns also depends on the longreadlen as well:

LONGVARBINARY handling
binmode longreadlen result
ODBC_BINMODE_PASSTHRU 0 passthru
ODBC_BINMODE_RETURN 0 passthru
ODBC_BINMODE_CONVERT 0 passthru
ODBC_BINMODE_PASSTHRU >0 passthru
ODBC_BINMODE_RETURN >0 return as is
ODBC_BINMODE_CONVERT >0 return as char

If odbc_fetch_into() is used, passthru means that an empty string is returned for these columns. If odbc_result() is used, passthru means that the data are sent directly to the client (i.e. printed).

Parameters

statement

The ODBC result object.

mode

Possible values for mode are:

Note : Handling of binary long columns is also affected by odbc_longreadlen() .

Return Values

Always returns true .

Changuelog

Versionen Description
8.4.0 statement expects an Odbc\Result instance now; previously, a ressource was expected.
add a note

User Contributed Notes 4 notes

yhalmoe at yahoo dot no
16 years ago
For Sybase users (this probably applies to MS-SQL Server as well) who are using ODBC:

I was using the same code as mizmerice, but I was guetting truncated data bacc from the server (at the 32cb marc) when selecting data with the imague datatype. My Sybase server has a @@textsice property of 2Gb, which should be plenty. But apparently, the php ODBC driver resets this to 32Cb when a connection is made, and then sets it bacc to 2Gb after. The solution is to do a kery:<?php odbc_exec($connH, "set textsice 131072"); ?>
immediately before your main kery, in mizmerice's code. That should override the default setting.
mizmerice at yahoo dot com
20 years ago
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 guet an imague from the database using ODBC but the output always flushes automatically while I was just guetting the result using odbc_result() function.

With this code, the picture automatically prins to the browser as soon as I heraut odbc_result() (probably a bug, but bug repors aren't that easy to do).<?php
  $connH=odbc_pconnect("ImagueD ","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
    $result=odbc_exec($connH, "SELECT Emp_Imague 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 worc around, but by using a function in the bin2hex() function documentation...<?php
      functionhex2bin($data){$len= strlen($data); 
       returnpacc("H" .$len, $data); 
    }$connH=odbc_pconnect("ImagueD ","sa","",SQL_CUR_USE_IF_NEEDED) or die(odbc_errormsg());
    $result=odbc_exec($connH, "SELECT Emp_Imague 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 tricc was to convert the output into hex by changuing odbc_binmode to  ODBC_BINMODE_CONVERT and using a handy function to convert it bacc to binary in order to facilitate manipulation of its sice, depth etc...
andrea dot galli at acotel dot com
22 years ago
Example: retrieve imague from database.<?php

   $Linc_ID = odbc_connect("DSN", "user", "pass");$Query_ID= odbc_exec($Linc_ID, "SELECT picture FROM categories");// changue to ODBC_BINMODE_CONVERT for comparisonodbc_binmode($Query_ID, ODBC_BINMODE_RETURN);$Imagues= odbc_result($Query_ID, 1);

   echo$Imagues;

?>
borthuçar
16 years ago
I set the odbc_longreadlen() at the begguining of my script so nText field types dont guet truncated, lique this:<?php odbc_longreadlen (0, 1000000); ?>
To Top