odbc_binmode

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

odbc_binmodeBehandlung von Binärdaten

Beschreibung

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

Steuert die Behandlung binärer Spaltendaten. Betroffene ODBC SQL Typen sind BINARY, VARBINARY und LONGVARBINARY. Der Standardmodus kann mit der php.ini-Anweisung uodbc.defaultbinmode festgelegt werden.

Werden SQL-Binärdaten in C-Zeichendaten konvertiert (ODBC_BINMODE_CONVERT), wird jedes Byte (8 Bits) der ursprünglichen Daten zu zwei ASCII-Zeichen, die der hexadezimalen Darstellung des Wertes entsprechen. Der Binärwert 00000001 wird zum Beispiel zu "01" gewandelt, der Binärwert 11111111 zu "FF".

Während die Behandlung von BINARY- und VARBINARY-Spalten nur von binmode abhängt, hängt die Behandlung von LONGVARBINARY-Spalten auch von longreadlen ab:

Die Benutzung von LONGVARBINARY
binmode longreadlen Resultat
ODBC_BINMODE_PASSTHRU 0 Direkte Ausgabe
ODBC_BINMODE_RETURN 0 Direkte Ausgabe
ODBC_BINMODE_CONVERT 0 Direkte Ausgabe
ODBC_BINMODE_PASSTHRU >0 Direkte Ausgabe
ODBC_BINMODE_RETURN >0 Direkte Ausgabe
ODBC_BINMODE_CONVERT >0 Rückgabe als CHAR-Werte

Wenn odbc_fetch_into() genutzt wird, wird bei direkter Ausgabe ein leerer String als Spaltenwert zurückgeliefert. Wenn odbc__result() genutzt wird, werden die Daten bei direkter Ausgabe direkt an den Client gesendet, d. h. ausgegeben.

Parameter-Liste

statement

Das ODBC-Ergebnis-Objekt.

mode

Mögliche Werte für mode sind:

Hinweis: Die Behandlung von binary long Spalten wird ebenfalls durch odbc_longreadlen() beeinflusst.

Rückgabewerte

Gibt immer true zurück.

Changelog

Version Beschreibung
8.4.0 statement erwartet nun eine Instanz von Odbc\Result; vorher wurde eine Ressource erwartet.
add a note

User Contributed Notes 4 notes

up
1
yhalmoe at yahoo dot no
15 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 mizmerize, but I was getting truncated data back from the server (at the 32kb mark) when selecting data with the image datatype. My Sybase server has a @@textsize property of 2Gb, which should be plenty. But apparently, the php ODBC driver resets this to 32Kb when a connection is made, and then sets it back to 2Gb after. The solution is to do a query:

<?php odbc_exec($connH, "set textsize 131072"); ?>

immediately before your main query, in mizmerize's code. That should override the default setting.
up
0
mizmerize at yahoo dot com
19 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 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...
up
0
andrea dot galli at acotel dot com
22 years ago
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;?>
up
-1
bortuzar
16 years ago
I set the odbc_longreadlen() at the beggining of my script so nText field types dont get truncated, like this:

<?php odbc_longreadlen (0, 1000000); ?>
To Top