Start · Sprachen · PHP · Referenz · mysql_result

mysql_result

Funktion

Gibt den Wert einer einzelnen Zelle (Zeile/Spalte) aus einem MySQL-Ergebnis-Ressource zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_result(resource $result, int $row, mixed $field = 0): string|false

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

Typ
string|false
Beschreibung
Gibt den Wert der angegebenen Zelle als 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);
?>
Name: Max Mustermann

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);
?>
Bestellung 1 gehoert Kunde 5 Bestellung 2 gehoert Kunde 3 Bestellung 3 gehoert Kunde 7

// 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.