Signatur
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
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.