Start · Sprachen · PHP · Referenz · mysql_fetch_row

mysql_fetch_row

Funktion

Liest die nächste Zeile aus einem MySQL-Ergebnis und gibt sie als numerisch indiziertes Array zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_fetch_row(resource $result): array|false

Beschreibung

mysql_fetch_row() liest eine Zeile aus dem Ergebnis einer MySQL-Abfrage und gibt sie als numerisch indiziertes Array zurück, wobei der Index bei 0 beginnt. Jeder Aufruf liefert die nächste Zeile; wenn keine weiteren Zeilen vorhanden sind, wird false zurückgegeben.

Im Gegensatz zu mysql_fetch_assoc() oder mysql_fetch_array() verwendet diese Funktion ausschließlich numerische Indizes. Der Zugriff auf die Spalten erfolgt also über $row[0], $row[1] usw., was die Funktion etwas schneller macht, aber weniger lesbar sein kann, wenn viele Spalten im Spiel sind.

Die Funktion wird typischerweise in einer while-Schleife verwendet, um alle Zeilen eines Ergebnisses zu durchlaufen. Sie eignet sich besonders dann, wenn die Spaltenreihenfolge bekannt und stabil ist oder wenn nur wenige Spalten abgerufen werden.

Wichtig: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert und in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli_fetch_row() oder PDOStatement::fetch() mit PDO::FETCH_NUM verwendet werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Ein MySQL-Ergebnis-Handle, das von mysql_query() zurückgegeben wurde.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, das die Spaltenwerte der aktuellen Zeile enthält. Gibt false zurück, wenn keine weiteren Zeilen vorhanden sind oder ein Fehler auftritt.

Beispiele

Alle Zeilen einer Tabelle mit mysql_fetch_row() auslesen

<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);

$ergebnis = mysql_query('SELECT id, name, email FROM benutzer', $verbindung);

if ($ergebnis) {
    while ($zeile = mysql_fetch_row($ergebnis)) {
        // Zugriff über numerische Indizes
        echo 'ID: '    . $zeile[0] . ', ';
        echo 'Name: '  . $zeile[1] . ', ';
        echo 'E-Mail: ' . $zeile[2] . PHP_EOL;
    }
    mysql_free_result($ergebnis);
} else {
    echo 'Fehler: ' . mysql_error();
}

mysql_close($verbindung);
?>
ID: 1, Name: Max Mustermann, E-Mail: max@example.com ID: 2, Name: Erika Muster, E-Mail: erika@example.com

Modernes Äquivalent mit mysqli_fetch_row()

<?php
// Empfohlene Alternative: MySQLi verwenden
$verbindung = new mysqli('localhost', 'benutzer', 'passwort', 'meine_datenbank');

if ($verbindung->connect_error) {
    die('Verbindungsfehler: ' . $verbindung->connect_error);
}

$ergebnis = $verbindung->query('SELECT id, name, email FROM benutzer');

if ($ergebnis) {
    while ($zeile = $ergebnis->fetch_row()) {
        echo 'ID: '    . $zeile[0] . ', ';
        echo 'Name: '  . $zeile[1] . ', ';
        echo 'E-Mail: ' . $zeile[2] . PHP_EOL;
    }
    $ergebnis->free();
}

$verbindung->close();
?>
ID: 1, Name: Max Mustermann, E-Mail: max@example.com ID: 2, Name: Erika Muster, E-Mail: erika@example.com

// Wichtig · Fallstricke

Veraltet und entfernt: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als deprecated markiert, in PHP 5.6 weiterhin gewarnt und in PHP 7.0.0 vollständig entfernt. Auf aktuellen PHP-Versionen ist die Funktion nicht mehr verfügbar.

Sicherheitshinweis: Die alte mysql_*-Erweiterung unterstützt keine Prepared Statements. Werden Benutzereingaben direkt in Abfragen eingebettet, drohen SQL-Injection-Angriffe. Immer mysql_real_escape_string() verwenden oder besser auf mysqli mit Prepared Statements bzw. PDO umsteigen.

Bei NULL-Werten in der Datenbank wird der entsprechende Array-Eintrag als PHP-null zurückgegeben.