Signatur
Beschreibung
odbc_longreadlen steuert, wie viele Bytes PHP beim Abrufen von LONG-Spalten (z. B. LONG VARCHAR, LONG VARBINARY, CLOB oder BLOB) aus einem ODBC-Ergebnis-Statement liest. Standardmäßig gibt PHP für solche Spalten keinen Inhalt zurück (Länge 0), da LONG-Felder sehr groß sein können. Mit odbc_longreadlen lässt sich dieses Limit explizit setzen.
Der Parameter length gibt die maximale Byte-Anzahl an, die gelesen werden soll. Wird 0 übergeben, wird das Lesen von LONG-Spalten deaktiviert – der Inhalt dieser Felder wird dann als leerer String zurückgegeben. Das Statement-Handle muss ein gültiges, bereits ausgeführtes ODBC-Statement-Objekt sein.
Diese Funktion ist besonders wichtig, wenn mit Datenbanken gearbeitet wird, die große Textfelder oder Binärdaten speichern (z. B. DB2, Oracle, Microsoft SQL Server). Ohne explizites Setzen der Lesegrenzen könnten entweder zu wenig Daten gelesen oder unkontrolliert sehr große Mengen an Speicher alloziert werden.
Es empfiehlt sich, odbc_longreadlen direkt nach odbc_exec oder odbc_prepare/odbc_execute aufzurufen, bevor die ersten Ergebniszeilen mit odbc_fetch_row oder odbc_result abgerufen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges ODBC-Statement-Handle, wie es von odbc_exec, odbc_prepare oder odbc_execute zurückgegeben wird. |
|
| $length Pflicht | int | Die maximale Anzahl von Bytes, die aus einer LONG-Spalte gelesen werden sollen. Bei 0 wird das Lesen von LONG-Spalten vollständig deaktiviert und diese erscheinen als leerer String. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiges Statement-Handle).Beispiele
LONG VARCHAR-Spalte auslesen
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$stmt = odbc_exec($conn, "SELECT id, beschreibung FROM artikel");
if (!$stmt) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
// Bis zu 65535 Bytes aus LONG-Spalten lesen
odbc_longreadlen($stmt, 65535);
while (odbc_fetch_row($stmt)) {
$id = odbc_result($stmt, 'id');
$beschreibung = odbc_result($stmt, 'beschreibung');
echo "ID: $id\nBeschreibung: $beschreibung\n\n";
}
odbc_free_result($stmt);
odbc_close($conn);
LONG-Spalten gezielt deaktivieren (Lesemenge auf 0 setzen)
<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$stmt = odbc_exec($conn, "SELECT id, titel, grosses_textfeld FROM dokumente");
if (!$stmt) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
// LONG-Spalten komplett überspringen (z. B. für reine Metadaten-Abfragen)
odbc_longreadlen($stmt, 0);
while (odbc_fetch_row($stmt)) {
$id = odbc_result($stmt, 'id');
$titel = odbc_result($stmt, 'titel');
// grosses_textfeld wird als leerer String zurückgegeben
echo "ID: $id, Titel: $titel\n";
}
odbc_free_result($stmt);
odbc_close($conn);
// Wichtig · Fallstricke
Speicher: Wählen Sie den Wert für length mit Bedacht. Ein zu hoch gesetzter Wert (z. B. mehrere Megabyte) kann bei vielen Datensätzen zu erheblichem Speicherverbrauch führen, da PHP die gesamte Zeichenkette im Arbeitsspeicher hält.
Standardverhalten: Ohne Aufruf von odbc_longreadlen liefern LONG-Spalten in vielen Konfigurationen einen leeren String. Dies ist ein häufiger Fallstrick, wenn Felder vom Typ CLOB oder LONG VARCHAR scheinbar leer erscheinen.
Datenbankabhängigkeit: Das Verhalten kann je nach ODBC-Treiber und Datenbanksystem leicht variieren. Testen Sie die Einstellung stets mit den tatsächlichen Daten und dem verwendeten Treiber.