Tom: ergebnis von mysql_fetch_array gezielt abfragen

Beitrag lesen

Hello (Schu)Bert, :-)

ich habe eine mysql tabelle die ich mit php abfrage, die abfrage speichere ich in einer variable, diese wiederum also das Ergebnis der Abfrage packe ich in ein Array mittels mysql_fetch_array.  In der Tabelle sind drei Zeilen, meine Frage lautet nun wie kann ich z.B auf Atribut B von Zeile 2 direkt zugreifen?

Das sieht zwar so aus, als würdest Du es so tun, aber da passiert vermutlich etwas anderes:

Du fragst das MySQL Datenbanksysteme mit einem "Query-String" ab.
Dabei greifst Du dann auf Deine Tabelle zu.

Das Abfrageergebnis wird von MySQL in einem Transfer-Buffer gespeichert.
PHP holt es aus diesem heraus und legt es unter einem Handle in einem Speicherbereich außerhalb des PHP-Speichers ab (also noch im Bereich der DB).

Du fragst nun unter Verwendung dieses Handles und einer speziellen Funktion, nämlich in Deinem Fall

$_record = mysql_fetch_array($handle);

jeweils den aktuell anstehenden Datensatz (die Zeile) des "Resultsets" ab.
Der Datensatzzeiger rutscht danach automatisch auf die nächste Zeile.

In Deinem $_record steht also immer nur der eine eben gerade abgefragte Datensatz.
Auf dessen Elemente kannst Du zugreifen, wie auf jedes PHP-Array

echo htmlspecialchars(print_r($_record,1));

würde Dir diesen einen Satz HTML-konform auf die Standarsausgabe befördern.

Wenn Du nun aus dem Resultset direkt ein spezielles Element haben willst, ohne vorher alle Zeilen ins den Speicherbereich des PHP-Scriptes zu übernehmen, musst Du eine andere Funktion verwenden

Du könntest den Satzzeiger z.B. gezielt auf einen Datensatz einstellen
http://de3.php.net/manual/de/function.mysql-data-seek.php
und dann mittels mysql_fetch_assoc() die ganze Zeile auslesen.
Dabei Wird der Datensatzeiger natürlich auch wieder einen Satz weiter bewegt.

Um alle Zeilen ins PHP-Scope zu übernehmen, kannst Du eine Schleife laufen lassen:

$res = mysql_query($sql, $con);

$_resulttable = array();

if ($res)
   {
     while( $_record =  mysql_fetch_assoc($res))
     {
        $_resulttable[] = $_record;
     }
   }

echo "<pre>\r\n";
   echo htmlspecialchars(print_r($_resulttable,1));
   echo "</pre>\r\n";

Den Rest müsstest Du dann selber hinbekommen.

Außerdem solltest Du Dein SQL-Query immer so gestaslten, dass Du keine nutzlosen Ergebnisse bekommst, also nur soviel aus der Datenbank abfragen, wie auch verwertet wird.

Ein harzliches Glückauf

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de