Bild das als Blob in einer DB gespeichert ist über PHP wieder ausgeben

  • Hallo zusammen, ich habe da eine Frage bezügl. eines Problemes mit dem auslesen bzw. ausgeben von Bilder aus einer lokalen MysqliDB!


    Wie beschrieben sind ein paar Bilder als Blob in der DB gespeichert, jedoch weis ich nicht genau wie ich die in PhP wieder auslesen kann.


    Ich habe gelesen das es da wohl Möglichkeiten gibt diese anzuzeigen und nicht nur den Bildercode.


    Ich würde mich sehr freuen wenn jemand helfen kann =)



    Lg:)

  • Vielen Dank für deine schnelle Antwort und Hilfe. Leider kommt da statt das Bild nur ein kleines Icon für eine Bilddatei heraus. Ich weis leider nicht wo das Problem liegt.


    Weist du zufällig an was das liegen könnte?


    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "images";
                       
                       
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }
    // SELECT (whatever rows you want) FROM (your table name)
    $sql = "SELECT Id, name, image FROM tbl_image";
    $result = $conn->query($sql);
                       
                       
    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    // Outputting HTML and the data from the DB. Change to $row['the name of the field you want']
    echo '<div><img src="data:image/jpeg;base64,'.base64_encode($row['image']).'"/>'. $row['name']. '</div>';
    }
    } else {
    echo "Keine Verbindung zur DB";
    }
    $conn->close();



    Nebenbei, es ist nur ein kleines Projekt, also nichts was je online gestellt werden soll. Also von daher hatt ich die Blob Methode gewählt. ;)


    Lg

  • Carstenh84

    Und wo aktivierst du das Error-Reporting? Sehe ich nicht.

    Vielleicht sind die Daten in der DB ja schon kaputt.

    Damit meint er das https://www.php.net/manual/de/function.error-reporting


    Und ich wollte das du in der Browser Konsole schaust , und mir den HTML Code zeigst der im Browser ankommt.

    Es kann ja sein das der ganze base64 String im src Attribute vorhanden ist , aber irgendwo ein anderes Problem ist:


    Wie hast du eigentlich den BLOB in der DB gespeichert?

    Hast du das einfach als Varchar ,Text erstellt , oder longblob ?


    Was zeigt den $row['name'] an , auch nichts oder den Namen wie es da steht?

  • <!DOCTYPE html>
    <html lang="de">
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    </head>
    <body>
    <?php

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "images";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }

    $query = "SELECT image FROM tbl_image";
    $result = mysqli_query($conn,$query);
    if($result){
    $row = mysqli_fetch_assoc($result);
    echo "<img src='data:image/jpeg;base64,".base64_encode($row['image'])."'>";
    }

    ?>
    </body>
    </html>


    basti1012 ich habe jetzt mal eine komplett neue Html erstellt um zu schauen ob es da geht, aber auch hier funktioniert die Ausgabe nicht.

    Und ja die $row liefert den Namen. Die Blob habe ich als longblob gespeichert.


    herzliche Grüße

  • Ich wiederhole mich:


    Zitat

    Und wo aktivierst du das Error-Reporting? Sehe ich nicht.

    Vielleicht sind die Daten in der DB ja schon kaputt.

    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • Ich wiederhole mich:


    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Wie schon erwähnt, bin ich gerade erst dabei mich näher damit zu befassen!

  • Wie wurden die Einträge in der Datenbank erstellt ?

    Was ist hier mit?

    Ich sehe das da $row['name'] auch keine Ausgabe hat.

    Ok in #11 nutzt du Name nicht mehr , aber an Anfang war es noch da , genauso wie die while Schleife.


    Kannst du mal ein Foto von deiner Datenbank Struktur machen ?


    Das du jetzt anfängst

    Objektorientierter Stil und Prozeduraler Stil durcheinander zu nutzen ,macht es erst recht nicht besser