Signatur
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
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);
?>
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();
?>
// 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.