Signatur
Beschreibung
mysql_result() liest den Wert einer einzelnen Zelle aus einem MySQL-Abfrageergebnis. Dazu werden die Ressource des Ergebnisses, der nullbasierte Zeilenindex sowie optional der Spaltenname oder Spaltenindex angegeben. Die Funktion eignet sich für einfache Abfragen, bei denen nur ein einzelner Wert benötigt wird, ohne eine komplette Zeile zu holen.
Der Parameter $field kann als Integer (Spaltenindex, nullbasiert), als Spaltenname oder im Format Tabellenname.Spaltenname angegeben werden. Letzteres ist bei JOIN-Abfragen mit gleichnamigen Spalten nützlich.
Achtung: Die gesamte Extension mysql_* (auch ext/mysql genannt) ist seit PHP 5.5.0 als veraltet (deprecated) markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli_* oder PDO verwendet werden.
Im Vergleich zu mysql_fetch_row() oder mysql_fetch_assoc() ist mysql_result() bei der Verarbeitung mehrerer Zeilen deutlich langsamer und sollte daher nur für einzelne Zellzugriffe eingesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Die MySQL-Ergebnis-Ressource, die von mysql_query() zurückgegeben wurde. |
|
| $row Pflicht | int | Der nullbasierte Index der Zeile im Ergebnis. Zulässige Werte: 0 bis mysql_num_rows($result) - 1. |
|
| $field | mixed | 0 | Der Spaltenbezeichner: ein nullbasierter Integer-Index, ein Spaltenname als String oder ein String im Format Tabellenname.Spaltenname. Standardmäßig wird die erste Spalte (Index 0) zurückgegeben. |
Rückgabewert
string zurück. Bei einem Fehler oder einem ungültigen $row-Index wird false zurückgegeben. NULL-Werte in der Datenbank werden als PHP-String "" (leerer String) zurückgegeben.Beispiele
Einzelnen Wert aus einer Abfrage lesen
<?php
// Verbindung zur Datenbank herstellen (ext/mysql, nur für ältere Codebasen)
$link = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $link);
$result = mysql_query('SELECT vorname, nachname FROM benutzer WHERE id = 1', $link);
if ($result && mysql_num_rows($result) > 0) {
$vorname = mysql_result($result, 0, 'vorname');
$nachname = mysql_result($result, 0, 'nachname');
echo "Name: $vorname $nachname";
}
mysql_free_result($result);
mysql_close($link);
?>
Spalte per Index und Tabellenname.Spaltenname ansprechen
<?php
$link = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('shop', $link);
// JOIN-Abfrage mit gleichnamiger Spalte in beiden Tabellen
$result = mysql_query(
'SELECT bestellungen.id, kunden.id AS kid FROM bestellungen '
. 'JOIN kunden ON bestellungen.kunden_id = kunden.id LIMIT 3',
$link
);
for ($i = 0; $i < mysql_num_rows($result); $i++) {
// Zugriff per Tabellenname.Spaltenname verhindert Mehrdeutigkeit
$bestellId = mysql_result($result, $i, 'bestellungen.id');
$kundeId = mysql_result($result, $i, 'kunden.id');
echo "Bestellung $bestellId gehoert Kunde $kundeId\n";
}
mysql_free_result($result);
mysql_close($link);
?>
// Wichtig · Fallstricke
Deprecation/Entfernung: Die mysql_*-Extension ist seit PHP 5.5.0 veraltet und in PHP 7.0.0 vollständig entfernt worden. Code, der diese Funktion nutzt, funktioniert auf modernen PHP-Versionen nicht mehr. Migriere auf mysqli_* oder PDO.
Sicherheit: mysql_result() bietet keinerlei Schutz vor SQL-Injection. Benutzereingaben müssen stets mit mysql_real_escape_string() bereinigt werden — oder noch besser: Prepared Statements mit mysqli oder PDO verwenden.
Performance: Bei der Iteration über viele Zeilen ist mysql_result() deutlich langsamer als mysql_fetch_row(), mysql_fetch_assoc() oder mysql_fetch_array(), da intern bei jedem Aufruf der Zeiger neu gesetzt wird. Die Funktion eignet sich daher nur für den Zugriff auf einzelne Zellen.