Hello Uwe,
Meine Vorgehensweise war diese
da habe ich jezt mal ein wenig drin herumgepfuscht.
Vielleicht hilft Dir das weiter, als die eigentlich angefragte Handbuchseite
<?php
# [...]
$con = mysql_connect('localhost', $user, $passwort);
if (!con)
{
## Fehlerbehandlung
}
if !(mysql_select_db($database_test, $con))
{
## Fehlerbehandlung
}
$query = "SELECT vorname, name FROM dynamik";
$testabfrage = mysql_query($query, $con);
if($testabfrage)
{
$row_testabfrage = mysql_fetch_assoc($testabfrage);
$totalRows_testabfrage = mysql_num_rows($testabfrage);
$_gesabfrage = array();
while($row_testabfrage = mysql_fetch_assoc($testabfrage))
{
$_gesabfrage[] = $row_testabfrage;
}
mysql_free_result($testabfrage); ## das Originalergebnis von MySQL benötigen
## wir jetzt nicht mehr und geben den Speicher frei
}
else
{
## Fehlerbehandlung
}
## kontrollausgab fürs debuggen:
echo "<pre>\n";
if (isset($_gesabfrage))
{
echo htmlspecialchars(print_r($_gesabfrage,1));
}
else
{
echo "kein Abfrageergebnis verfügbar<br />\n";
}
echo "</pre>\n";
?>
MySQL liefert nach der erfolgreichen Abfrage mit mysql_query() ein Datenset, quasi eine formatierte lineare Tabelle, die vomn PHP zwischengepuffert wird. Mit den API-Funktionen von PHP kannst Du darauf zugreifen. Du kannst auch darin navigieren.
Anders, wenn Du kein reines mysql_unbufferd_query() durchführst. Da kannst Du, ähnlich einer klassischen Textdatei, nur vorwärts drin lesen. Es ist ein FiFo-Speicher, der von Dir vollständig geleert werden muss.
Du musst dann auf jeden Fall die Übernahme _aller_ gelieferten Datensätze garantieren, da die Schnittstelle sonst für ein weiteres Query nicht zur Verfügung steht.
Im obigen Beispiel haben wir das aber auf jeden Fall durch die Übertragung der Daten in ein PHP-Array vorgenommen. Beim bufferd Query ist das eigentlich nicht notwendig, aber es ist bequemer.
Vermutlich ist es aber genauso obsolete, wie das typische $name = $_POST['name'];
Allerdings ist der Zugriff auf einzelne Speicherzellen im gepufferten resultset eben recht funktionslastig.
1. Schritt: schauen, ob ein Datensatz vorhanden sit mit mysql_num_rows()
2. Schritt: in dem Objekt den Zeiger auf den Datensatz einstellen mit mysql_data_seek()
das muss im Bereich von 0 bis mysql_num_rows() -1 sein
3. Schritt: auf den Datensatz mit den mysql_fetch_*() Funtionen zugreifen
4. Schritt: nicht vergessen, den Speicher des Objektes wieder freizugeben
Ein Überschreiben des Objekt-Kennzeichners (mit einer neuen Abfrage) hat bisher
den Speicher der alten Abfrage nicht wieder freigegeben.
Mit PHP-Arrays geht das alles etwas bequemer.
Darum überlege ich, ob es nicht konsequenter ist, nur noch unbufferd Queries durchzuführen, da ich die Ergebnismenge sowieso immer in ein PHP-Array überführe.
Ob dann aber auch noch ein mysql_free_result() notwendig ist, ist mir noch nicht klar...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
