Signatur
Beschreibung
mysql_fetch_array() liest die jeweils nächste Zeile aus einem MySQL-Ergebnis-Ressource-Objekt und gibt sie als Array zurück. Über den Parameter result_type kann gesteuert werden, ob die Felder über ihren Spaltennamen (assoziativ), über ihren Index (numerisch) oder über beides erreichbar sein sollen.
Die Funktion wird typischerweise in einer while-Schleife eingesetzt, um alle Zeilen eines Abfrageergebnisses zu durchlaufen. Gibt es keine weiteren Zeilen, liefert sie false, womit die Schleife automatisch endet.
Achtung: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet markiert und in PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli_fetch_array() oder PDOStatement::fetch() verwendet werden.
Beim Standardwert MYSQL_BOTH enthält das zurückgegebene Array jeden Feldwert doppelt – einmal unter dem numerischen Index und einmal unter dem Spaltennamen –, was zu einem höheren Speicherverbrauch führt. Wo möglich, sollte daher MYSQL_ASSOC oder MYSQL_NUM bevorzugt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Eine gültige MySQL-Ergebnis-Ressource, wie sie von mysql_query() zurückgegeben wird. |
|
| $result_type | int | MYSQL_BOTH | Bestimmt, wie die Felder indiziert werden. Mögliche Werte: MYSQL_ASSOC (nur Spaltennamen), MYSQL_NUM (nur numerische Indizes) oder MYSQL_BOTH (beides). |
Rückgabewert
false zurückgegeben.Beispiele
Alle Zeilen mit assoziativem Array ausgeben
<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);
$ergebnis = mysql_query('SELECT id, name, email FROM benutzer', $verbindung);
while ($zeile = mysql_fetch_array($ergebnis, MYSQL_ASSOC)) {
echo 'ID: ' . $zeile['id'] . ', Name: ' . $zeile['name'] . ', E-Mail: ' . $zeile['email'] . PHP_EOL;
}
mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
Moderner Ersatz mit MySQLi
<?php
// Empfohlene Alternative: mysqli_fetch_array()
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'meine_datenbank');
$ergebnis = $mysqli->query('SELECT id, name, email FROM benutzer');
while ($zeile = mysqli_fetch_array($ergebnis, MYSQLI_ASSOC)) {
echo 'ID: ' . $zeile['id'] . ', Name: ' . $zeile['name'] . PHP_EOL;
}
$ergebnis->free();
$mysqli->close();
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Benutzereingaben dürfen niemals unbereinigt in SQL-Abfragen eingebaut werden. Mit der alten mysql_*-Erweiterung war mysql_real_escape_string() erforderlich; moderne Alternativen wie PDO oder mysqli unterstützen vorbereitete Anweisungen (Prepared Statements), die SQL-Injection zuverlässig verhindern.
Deprecation: mysql_fetch_array() und die gesamte mysql_*-Erweiterung wurden in PHP 5.5.0 als veraltet (deprecated) eingestuft und in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, ist auf PHP 7+ nicht mehr lauffähig und muss auf mysqli_fetch_array() oder PDOStatement::fetch() migriert werden.
Bei MYSQL_BOTH (Standardwert) wird jeder Feldwert im Array doppelt gespeichert, was bei großen Ergebnismengen den Speicherverbrauch verdoppelt. Wenn nur assoziative oder nur numerische Indizes benötigt werden, sollte explizit MYSQL_ASSOC bzw. MYSQL_NUM angegeben werden.