Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : ODBC Functions (Unified) : odbc_binmode

odbc_binmode

Handling of binary column data (PHP 4, PHP 5)
bool odbc_binmode ( resource result_id, int mode )

Examples ( Source code ) » odbc_binmode

<?php
    
//get a GIF from a database and send it to browser
    //connect to database
    
$Connection odbc_connect("inventory""admin""secret");

    
//execute query
    
$Query "SELECT Data " .
        
"FROM Picture " .
        
"WHERE ID=2 ";
    
$Result odbc_do($Connection$Query);

    
//make sure binmode is set for binary pass through
    
odbc_binmode($ResultODBC_BINMODE_PASSTHRU);

    
//make sure longreadlen mode
    //is set for echo to browser
    
odbc_longreadlen($Result0);

    
//get the first row, ignore the rest
    
odbc_fetch_row($Result);

    
//send header so browser knows it's a gif
    
header("Content-type: image/gif");

    
//get the picture
    
odbc_result($Result1);
?>

Code Examples / Notes » odbc_binmode

mizmerize

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

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;
?>


Change Language


Follow Navioo On Twitter
odbc_autocommit
odbc_binmode
odbc_close_all
odbc_close
odbc_columnprivileges
odbc_columns
odbc_commit
odbc_connect
odbc_cursor
odbc_data_source
odbc_do
odbc_error
odbc_errormsg
odbc_exec
odbc_execute
odbc_fetch_array
odbc_fetch_into
odbc_fetch_object
odbc_fetch_row
odbc_field_len
odbc_field_name
odbc_field_num
odbc_field_precision
odbc_field_scale
odbc_field_type
odbc_foreignkeys
odbc_free_result
odbc_gettypeinfo
odbc_longreadlen
odbc_next_result
odbc_num_fields
odbc_num_rows
odbc_pconnect
odbc_prepare
odbc_primarykeys
odbc_procedurecolumns
odbc_procedures
odbc_result_all
odbc_result
odbc_rollback
odbc_setoption
odbc_specialcolumns
odbc_statistics
odbc_tableprivileges
odbc_tables
eXTReMe Tracker