Start · Sprachen · PHP · Referenz · odbc_binmode

odbc_binmode

Funktion

Legt fest, wie Binärdaten aus ODBC-Ergebnissen behandelt werden (z. B. konvertiert, passthrough oder ignoriert).

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_binmode(resource|int $statement, int $mode): bool

Beschreibung

odbc_binmode steuert, auf welche Weise binäre Spalten (SQL-Typen wie BINARY, VARBINARY, LONGVARBINARY) beim Abruf von ODBC-Ergebnissen verarbeitet werden. Dies ist vor allem dann relevant, wenn BLOB-Felder oder rohe Binärdaten aus einer Datenbank gelesen werden sollen.

Der Parameter mode akzeptiert eine der drei vordefinierten Konstanten: ODBC_BINMODE_PASSTHRU (Rohdaten direkt ausgeben), ODBC_BINMODE_RETURN (Binärdaten als String zurückgeben) oder ODBC_BINMODE_CONVERT (Binärdaten in hexadezimale Zeichenketten umwandeln). Die Wahl des Modus hängt davon ab, wie die Anwendung die Daten weiterverarbeiten soll.

Wird als statement der Wert 0 übergeben, gilt die Einstellung als Standardwert für alle zukünftig erstellten Statements innerhalb der aktuellen Verbindung. Damit lässt sich ein konsistentes globales Verhalten einrichten, ohne jedes Statement einzeln konfigurieren zu müssen.

Diese Funktion ist besonders nützlich, wenn Bilddaten, Dokumente oder andere Binärinhalte aus einer ODBC-Quelle korrekt ausgelesen und z. B. als Download oder für Weiterverarbeitung bereitgestellt werden sollen.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource|int Ein ODBC-Statement-Handle, wie es von odbc_prepare oder odbc_exec zurückgegeben wird. Bei Übergabe von 0 wird der Modus als globaler Standard für alle neuen Statements gesetzt.
$mode Pflicht int Der gewünschte Verarbeitungsmodus für Binärdaten. Mögliche Werte: ODBC_BINMODE_PASSTHRU (1, Rohdaten direkt an die Ausgabe senden), ODBC_BINMODE_RETURN (2, Binärdaten als PHP-String zurückgeben), ODBC_BINMODE_CONVERT (0, in hexadezimale Darstellung umwandeln).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiges Statement-Handle oder unbekannter Modus).

Beispiele

Binärdaten als PHP-String zurückgeben

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

$stmt = odbc_prepare($conn, 'SELECT bild_daten FROM produkte WHERE id = ?');
odbc_binmode($stmt, ODBC_BINMODE_RETURN);
odbc_execute($stmt, [42]);

$row = odbc_fetch_array($stmt);
$bilddaten = $row['bild_daten'];

// Binärdaten als PNG-Datei senden
header('Content-Type: image/png');
echo $bilddaten;

odbc_close($conn);

Globalen Standard für alle Statements setzen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// Binärmodus global auf hexadezimale Konvertierung setzen
odbc_binmode(0, ODBC_BINMODE_CONVERT);

$result = odbc_exec($conn, 'SELECT hash_wert FROM tokens');
while ($row = odbc_fetch_array($result)) {
    // hash_wert wird als Hex-String geliefert
    echo 'Hex: ' . $row['hash_wert'] . PHP_EOL;
}

odbc_close($conn);

// Wichtig · Fallstricke

Zusammenspiel mit odbc_longreadlen: Bei langen Binärdaten (LONGVARBINARY) sollte zusätzlich odbc_longreadlen aufgerufen werden, um die maximale Anzahl zurückzugebender Bytes zu erhöhen. Standardmäßig ist dieser Wert oft auf 4096 Bytes begrenzt, was bei größeren BLOBs zu unvollständigen Daten führt.

Modus ODBC_BINMODE_PASSTHRU: In diesem Modus werden die Daten direkt an den PHP-Ausgabepuffer gesendet, anstatt sie als Rückgabewert bereitzustellen. Das kann bei großen Dateien sinnvoll sein, macht aber eine nachträgliche Verarbeitung im PHP-Code unmöglich.

Deprecation: Ab PHP 8.0 werden ODBC-Statements durch \ODbc\Result-Objekte repräsentiert. Das Übergeben von 0 als Statement-Handle für das globale Setzen des Standards ist noch möglich, sollte aber sorgfältig eingesetzt werden.