Signatur
Beschreibung
mysql_fetch_assoc() liest die nächste Zeile aus dem übergebenen Abfrageergebnis ($result) und gibt sie als assoziatives Array zurück. Die Schlüssel des Arrays entsprechen den Spaltennamen der Abfrage. Bei jedem Aufruf wird der interne Zeiger des Ergebnisses um eine Zeile vorgerückt, sodass die Funktion in einer Schleife verwendet werden kann, um alle Zeilen nacheinander zu verarbeiten.
Die Funktion entspricht dem Aufruf von mysql_fetch_array() mit dem Flag MYSQL_ASSOC und gibt ausschließlich assoziative Schlüssel zurück – im Gegensatz zu mysql_fetch_array(), das standardmäßig sowohl numerische als auch assoziative Schlüssel liefert. Dies spart Speicherplatz und macht den Code lesbarer.
Wichtiger Hinweis: Die gesamte mysql_*-Erweiterung wurde mit PHP 5.5.0 als veraltet markiert und mit PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli_fetch_assoc() oder PDO::fetch(PDO::FETCH_ASSOC) verwendet werden.
Die Funktion ist nützlich, wenn auf Spaltenwerte über deren Namen zugegriffen werden soll, was die Lesbarkeit und Wartbarkeit gegenüber numerischen Indizes deutlich verbessert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Das MySQL-Ergebnis-Resource-Handle, das von mysql_query() zurückgegeben wurde. |
Rückgabewert
false zurück, wenn keine weitere Zeile vorhanden ist oder ein Fehler aufgetreten ist.Beispiele
Alle Datensätze einer Tabelle ausgeben
<?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) {
die('Abfrage fehlgeschlagen: ' . mysql_error());
}
while ($zeile = mysql_fetch_assoc($ergebnis)) {
echo 'ID: ' . htmlspecialchars($zeile['id']) . '\n';
echo 'Name: ' . htmlspecialchars($zeile['name']) . '\n';
echo 'E-Mail: ' . htmlspecialchars($zeile['email']) . '\n';
echo '---\n';
}
mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
Moderne Alternative mit MySQLi
<?php
// Empfohlene Alternative: mysqli_fetch_assoc()
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'meine_datenbank');
if ($mysqli->connect_error) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$ergebnis = $mysqli->query('SELECT id, name, email FROM benutzer');
while ($zeile = $ergebnis->fetch_assoc()) {
echo 'ID: ' . htmlspecialchars($zeile['id']) . '\n';
echo 'Name: ' . htmlspecialchars($zeile['name']) . '\n';
echo 'E-Mail: ' . htmlspecialchars($zeile['email']) . '\n';
echo '---\n';
}
$ergebnis->free();
$mysqli->close();
?>
// Wichtig · Fallstricke
Deprecation / Entfernung: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet markiert, in PHP 5.6.x erzeugt sie E_DEPRECATED-Warnungen und ist seit PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, ist nicht mehr lauffähig unter PHP 7 oder neuer.
SQL-Injection: Die alte mysql_*-Erweiterung unterstützt keine Prepared Statements. Benutzereingaben müssen zwingend mit mysql_real_escape_string() maskiert werden – auch dies ein Grund, auf mysqli oder PDO zu wechseln, die Prepared Statements mit Parameterbindung unterstützen.
Namenskonflikte: Enthält das Abfrageergebnis mehrere Spalten mit demselben Namen (z. B. bei JOINs), überschreiben sich die Werte im zurückgegebenen Array gegenseitig. In diesem Fall sollten Spalten-Aliase in der SQL-Abfrage verwendet werden.