Signatur
Beschreibung
odbc_fetch_into() liest die nächste (oder eine bestimmte) Zeile eines ODBC-Ergebnisses direkt in ein übergebenes Array. Das Array wird dabei überschrieben; jeder Index entspricht einer Spalte der Ergebnismenge, beginnend mit dem Index 1 (nicht 0).
Die Funktion ist besonders dann nützlich, wenn man ein bereits vorhandenes Array wiederverwenden möchte, ohne es vorher neu anlegen zu müssen. Im Gegensatz zu odbc_fetch_array() wird das Ziel-Array als Referenz übergeben, was in engen Schleifen etwas Overhead vermeiden kann.
Der optionale Parameter row erlaubt es, bei scrollbaren Cursorn eine bestimmte Zeilennummer direkt anzuspringen. Wird er weggelassen oder auf 0 gesetzt, wird die nächste Zeile im resultierenden Datensatz geholt, wie beim sequenziellen Durchlaufen üblich.
Die Funktion gibt bei Erfolg die Anzahl der gelesenen Spalten zurück und false, wenn keine weitere Zeile vorhanden ist oder ein Fehler auftritt – dies ist der typische Schleifenabbruchbedingung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $statement Pflicht | resource | Ein gültiges ODBC-Ergebnis-Handle, das z. B. von odbc_exec() oder odbc_execute() zurückgegeben wurde. |
|
| $array Pflicht | array | Das Ziel-Array, das als Referenz übergeben wird und nach dem Aufruf die Spaltenwerte der aktuellen Zeile enthält. Der erste Spaltenindex ist 1. |
|
| $row | int | 0 | Optionale Zeilennummer für scrollbare Cursor. Bei 0 oder weggelassen wird sequenziell die nächste Zeile gelesen. |
Rückgabewert
int zurück. Ist keine weitere Zeile vorhanden oder tritt ein Fehler auf, wird false zurückgegeben.Beispiele
Alle Zeilen einer ODBC-Abfrage sequenziell einlesen
<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'geheim');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}
$result = odbc_exec($conn, 'SELECT id, name, email FROM kunden');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}
$row = [];
while (odbc_fetch_into($result, $row)) {
// Spalten sind 1-basiert indiziert
echo 'ID: ' . $row[1] . ', Name: ' . $row[2] . ', E-Mail: ' . $row[3] . PHP_EOL;
}
odbc_free_result($result);
odbc_close($conn);
?>
Eine bestimmte Zeile über Zeilennummer abrufen (scrollbarer Cursor)
<?php
$conn = odbc_connect('MeinDSN', 'benutzer', 'geheim');
$result = odbc_exec($conn, 'SELECT id, name FROM produkte');
$row = [];
// Zeile 3 direkt anspringen (scrollbarer Cursor vorausgesetzt)
$anzahlSpalten = odbc_fetch_into($result, $row, 3);
if ($anzahlSpalten !== false) {
echo 'Spaltenanzahl: ' . $anzahlSpalten . PHP_EOL;
echo 'Produkt-ID: ' . $row[1] . PHP_EOL;
echo 'Produkt-Name: ' . $row[2] . PHP_EOL;
} else {
echo 'Keine Zeile mit dieser Nummer gefunden.';
}
odbc_free_result($result);
odbc_close($conn);
?>
// Wichtig · Fallstricke
Achtung: 1-basierte Indizierung. Im Gegensatz zu den meisten PHP-Arrays beginnt das befüllte Array bei Index 1, nicht bei 0. Darauf muss beim Zugriff unbedingt geachtet werden, um einen Undefined offset-Fehler zu vermeiden.
Scrollbare Cursor: Der Parameter row funktioniert nur, wenn der zugrunde liegende ODBC-Treiber und der Cursor-Typ das direkte Anspringen von Zeilen unterstützen. Bei einfachen Forward-Only-Cursorn wird dieser Parameter ignoriert oder führt zu einem Fehler.
Sicherheit: SQL-Abfragen sollten niemals direkt mit Benutzereingaben zusammengesetzt werden. Stattdessen sollten parametrisierte Abfragen mit odbc_prepare() und odbc_execute() verwendet werden, um SQL-Injection zu verhindern.
Ressourcen freigeben: Nach der Verarbeitung sollten odbc_free_result() und odbc_close() aufgerufen werden, um Datenbankressourcen zeitnah freizugeben.