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); ?>
odbc_binmode
(PHP 4, PHP 5)
odbc_binmode — Modifie la gestion des colonnes de données binaires
Description
odbc_binmode() modifie la gestion des colonnes de données binaires. Les types ODBC SQL affectés sont BINARY, VARBINARY et LONGVARBINARY.
Lorsqu'une donnée SQL est convertie en caractère C, les 8 bits du caractère source sont représentés par deux caractères ASCII. Ces caractères sont des représentations ASCII des nombres au format hexadécimal. Par exemple, le binaire 00000001 est converti en "01" et le binaire 11111111 est converti en "FF".
| Mode | Longueur | Résultat |
|---|---|---|
| ODBC_BINMODE_PASSTHRU | 0 | passthru |
| ODBC_BINMODE_RETURN | 0 | passthru |
| ODBC_BINMODE_CONVERT | 0 | passthru |
| ODBC_BINMODE_PASSTHRU | 0 | passthru |
| ODBC_BINMODE_PASSTHRU | 0 | passthru |
| ODBC_BINMODE_RETURN | 0 | Tel quel |
| ODBC_BINMODE_CONVERT | 0 | Caractère |
Si odbc_fetch_into() est utilisé, passthru signifie qu'une chaîne vide sera retournée pour ces colonnes.
Liste de paramètres
- result_id
-
L'identifiant de résultat.
Si result_id vaut 0, ces paramètres seront appliqués aux nouveaux résultats.
Note: La valeur par défaut de longreadlen est 4096 et celle de mode est ODBC_BINMODE_RETURN. La gestion des colonnes binaires est aussi modifiée par odbc_longreadlen().
- mode
-
Valeurs possibles pour le paramètre mode :
- ODBC_BINMODE_PASSTHRU : retourner les données en binaire
- ODBC_BINMODE_RETURN : retourner sans conversion
- ODBC_BINMODE_CONVERT : convertir en caractère
Valeurs de retour
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
odbc_binmode
12-Feb-2009 03:28
11-Jan-2006 02: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...
28-Apr-2003 03: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;
?>
