kostenloser Webspace werbefrei: lima-city


MySQL-result variable öfter in mysql_fetch_assoc()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    crackcheck

    crackcheck hat kostenlosen Webspace.

    Hallo,

    ja die frage hat steht eigentlich schon im titel.
    Also, ich mache einen mysql-query:
    $result = mysql_query("SELECT .. FROM .. WHERE ...");

    Jetzt benütz ich die $result variable für mysql_fetch_assoc() doch diese variable wird ja nach jedem anwenden geleert.
    Aber ich möchte das 2 mal machen, also die $result variable 2 mal in mysql_fetch_assoc() andwenden.
    Dann dacht ich mir:
    $result2 = $result

    Dann könnt ich ja rein theoretisch beim ersten mal $result und dann $result2 verwenden, get aber net..

    Wie kann die variable 2 mal verwenden ohne den query erneut zu machen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Deine "Variable" '$result' ist in wirklichkeit ein Array, in dem alle Werte gespeichert werden. Wenn du 2 Werte haben willst dusst du einfach ein Schleife bei mysql_fetch_assoc() machen. Wenn du das in 2 verschiedenen Variablen haben willst, dann sieht das so aus:

    $nummer = 1;
    while($row = mysql_fetch_assoc($result)) {
    if($nummer==1) {
    $eintrag1 = $row['spaltenname'];
    }
    
    if($nummer==2) {
    $eintrag2 = $row['spaltenname'];
    }
    
    $nummer++;
    }



    Das hab ich jetzt plos spontan und direkt hier im forum geschrieben, ohne es zu testen, aber es sollte funktionieren;)
  4. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Die Variable $result ist kein Array, sondern so etwas wie ein Zeiger. Sie speichert also nur einen Ort, wo die Werte her geholt werden, nicht die Werte selbst. Wenn du die Variable also kopierst, kopierst du nur den Verweis auf die Werte und wenn du mit Hilfe dieses Verweises die Daten änderst, ändern sich die Daten auch für die Kopie des Verweises. (Klingt jetzt vielleicht etwas kompliziert, aber leichter vermag ich das im Moment nicht auszudrücken.)

    Dieses Problem könnte die Funktion mysql_data_seek() lösen. Füg einfach mal vor das 2. mysql_fetch_assoc() folgende Zeile ein:
    mysql_data_seek($result,0);

    http://www.selfphp.de/funktionsreferenz/mysql_funktionen/mysql_data_seek.php
  5. Also ich verstehe deine Frage so, dass du deine Variable $result, welche du als Ergebnis der Funktion mysql_query erhälst, über die Funktion mysql_fetch_assoc einen neuen Wert übergeben willst und dann noch ein weiteres Mal den nächsten Wert aus dieser Variable auslesen möchtest.

    Keine Ahnung, ob das so in etwas das trifft, was du gerne machen würdest.

    Falls ja, dann ist da ein kleiner Denkfehler an sich enthalten. Wie von sandrock-jonas bereits erwähnt, handelt es sich bei dem Ergebnis der Funktion mysql_query und somit dem Inhalt der Variable $result um eine Referenz auf eine Ressource, von wo die Daten erst ausgelesen werden müssen.

    Dies kann man beispielsweise mit der Funktion mysql_fetch_assoc machen. Es gibt aber auch noch andere, alle mit mysql_fetch_*** beginnend. Alle diese Funktionen geben dir ein Array zurück, welches eine Ergebniszeile deines SQL-Queries darstellt und geht dabei von oben nach unten vor. (Es gibt auch Funktionen, die kein Array zurückgeben, welche hier aber mal bei Seite lassen möchte.) assoc steht dabei für assoziativ, d.h. du erhälst also ein assoziatives Array, bei dem die Schlüssel die Spalten-Namen des SQL-Ergebnisses sind und die Werte die Inhalte innerhalb der Spalten innerhalb der gerade ausgelesenen Zeile.

    Mit jedem erneuten Aufruf der Funktion zu solch einem SQL-Ergebnis erhälst du eine weitere Zeile von deinem Ergebnis.

    Möchtest du also alle deine Ergebniszeilen in ein Array einlesen, dann wäre das bspw. wie folgt möglich:
    $query = '...'; // hier deine Abfrage
    $result = @mysql_query($query);
    
    $entries = array();
    while ($row = @mysql_fetch_assoc($result)) {
            $entries[] = $row;
    }
    @mysql_free_result($result);

    Natürlich könntest du auch auf die Daten deines assoziativen Arrays $row dort dann zugreifen und verarbeiten, wie du es brauchst. In dem Beispiel werden sie einfach nur gesammelt, wie sie durch die Abfrage gegeben sind. Zugreifen kannst du auf die einzelnen Spalten, wie es bei my-selfmade bereits im Code steht, über $row['spaltenname'].

    Möchtest du wirklich nur zwei Ergebniszeilen auslesen, kannst du das auch gern so machen:
    $result1 = @mysql_fetch_assoc($result);
    $result2 = @mysql_fetch_assoc($result);

    (Wobei eine solche Benennung wohl nicht wirklich zu empfehlen ist, man das Ganze schon eindeutiger und sinnvoller gestalten sollte. Hab das jetzt nur von deinem $result2 abgeleitet.)
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!