Mysql Abfrage Grundsatzfrage

  • Hallo Leute,


    Ich bin dabei, eine eigene Homepage zu erstellen in der auch eine Bildergalerie zu finden ist. Die Bildinformationen und eventuelle Infotexte liegen in einer Datenbank bereit.


    Ich habe aber ein generelles Problem bei der Abfrage.

    Code
    1. $album="Wolli&Mauzel";
    2. $sql = 'SELECT nr, name, info, file, date, album FROM Galerie WHERE album="'.$album.'"';
    3. $result = $conn->query($sql);
    4. $rows = $result->num_rows;

    Mit dieser Abfrage sollten im array $result alle Informationen der Bilder aus dem Album "Wolli&Mauzel" landen.

    In $rows steht die Anzahl der "Datenzeilen"


    Wie komme ich aber gezielt an so eine Reihe dran?

    Bei allen Infos im Netz zum Thema Datenbank auslesen, wird alles per while Schleife ausgelesen.

    Das ist aber für mich total unbrauchbar.


    Alles müsste ja bereits im $result array stehen.

    Kann man da nicht gezielt eine Reihe auslesen,?


    Nach dem Motto:

    Spuck mir aus $result reihe3


    Nr

    Name

    Info

    File

    Date

    Album


    raus. Zb dann alles über eine for Schleife abrufen bei der i die aktuelle Reihe und $rows das Ende der Schleife bedeutet.


    Die for Schleife wird dann nachher natürlich verschwinden und gegen eine vor / zurück Funktion ersetzt.


    Kann mir einer helfen?

  • Ein mysqli Result Object.

    Steht alles in der Dokumentation:


    https://www.php.net/manual/de/mysqli.query.php (Unter Rückgabewerte)

    https://www.php.net/manual/de/class.mysqli-result.php


    Wie du an eine Reihe kommst (wenn du denn nur ein Album mit dem Titel Wolli&Mauzel hast):


    Code
    1. $album="Wolli&Mauzel";
    2. $sql = 'SELECT nr, name, info, file, date, album FROM Galerie WHERE album=?';
    3. $stmt = $conn->prepare($sql);
    4. $stmt->bind_param('s', $album);
    5. $stmt->execute();
    6. $row = $stmt->get_result()->fetch_assoc();
  • Code
    1. var_dump($result);

    Ergebnis:

    object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(6) ["lengths"]=> NULL ["num_rows"]=> int(5) ["type"]=> int(0) }


    sieht für mich wie ein Array aus....


    Aber da stehen nicht die Daten drinnen, die ich brauche.


    Code
    1. $rowtest = $result->fetch_assoc();

    Damit bekomme ich die Daten des ersten Bildes. Aber wie kann ich die anderen aufrufen?

  • Verzeihung das ich mich erst jetzt wieder melde. Ich hab es mittlerweile hinbekommen mit dem Pointer verschieben.

    m.scatello Danke für den Hinweis mit data_seek.


    Ein paar Sätze zu meiner Verteidigung: Ich bin recht neu mit php JS und Datenbanken. Mein Ziel ist es, möglichst zügig zu einer ansprechenden, funktionierenden Homepage zu kommen.

    Der Befehl var_dump() war mir bei meinem ersten post noch nicht bekannt. Wenn man aus einer 'variable' mehrere Ergebnisse fischen kann, könnte ein Leie, der nicht weiss, dass es sich bei $result um eine Objekt Struktur handelt, davon ausgehen, daß $result ein Array ist.


    Ebenfalls sind die Strukturen in den Dokumentationen und tutorials nicht immer deckungsgleich mit dem was nachher im Code steht. Das sollten die Profis unter euch mal bedenken.


    Beispiel:

    mysql_data_seek — Bewegt den internen Ergebnis-Zeiger

    Beschreibung ¶

    mysql_data_seek ( resource $result , int $row_number ) : bool


    Mein Code:


    Code
    1. $result->data_seek($row_number);

    sieht ziemlich anders aus, oder? Alles irgendwie verschoben im funktionsaufruf, falls data_seek überhaupt eine Funktion ist. Keine zwei Parameter... Da muss man erstmal drauf kommen...

    Ich muss mich noch in den GANZEN Datenbank-Kram reinfressen, aber für momentan reicht es, ich kann den Pointer verschieben und gezielt einen Datenblock abrufen.


    jonas3344 : danke für deine Unterstützung, aber mit Alben sind bilderalben gemeint. Die mehrere Bildinfos enthalten. In der Datenbank befinden sich viele Bilder mit diversen Infos wie adresspfad und Name der Bilddatei, kurzinfo, Langinfo, Datum....


    Und ein datenfeld Album.

    Nachher kann ich einen Datenbank Abruf machen, in dem nur alle Bilder mit einem speziellen Album Namen aufgerufen werden.


    So kann razz fatz ein neues Album Aus dem Ärmel gezaubert werden, wenn man es bei neuen Fotos braucht.

  • Ebenfalls sind die Strukturen in den Dokumentationen und tutorials nicht immer deckungsgleich

    Das A und O ist die Doku und die hast du nicht richtig gelesen.

    Zitat

    mysql_data_seek ( resource $result , int $row_number ) : bool

    Das ist schon mal falsch, weil es mysqli_data_seek sein muss und dann findet man in der Doku in den Beispielen:

    Code
    1. mysqli_data_seek($result, 399);

    und

    Code
    1. $result->data_seek(399);

    Der Unterschied besteht im prozeduralen und objektorientierten Stil, aber genau das steht in der Doku, man muss es nur richtig lesen und nicht auf die schnelle Überfliegen.

  • Ich würde gar nicht anfangen da im Resultset herumzustochern sondern einfach gleich alles in einen Array packen, dann kannst du durch den Array durchgehen.


    Code
    1. $album="Wolli&Mauzel";
    2. $sql = 'SELECT nr, name, info, file, date, album FROM Galerie WHERE album=?';
    3. $stmt = $conn->prepare($sql);
    4. $stmt->bind_param('s', $album);
    5. $stmt->execute();
    6. $images = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    7. echo '<pre>';
    8. print_r($images);
    9. echo '</pre>';