Daten aus Blob-Feld in mysql-DB auslesen

  • MoinMoin,


    ich muß die Inhalte eines blob-Feldes ausgeben.


    Beispielhaft hier ein Auszug. Im Blob sind Texte und Bilder
    enthalten.


    Das ich unserialisieren muß ist mir klar, nur wie verschließt sich
    mir. Wie serialisiert wurde weiß ich nicht.


    Ganz unten ein php-Code der teils funktioniert, ist zwar veraltet
    (mysql_) aber geht noch.


    So brauche ich die Daten:




    Headline: kfza


    Body: kfzatest


    Images: Bild als Bild (hier gesicht.jpg) oder
    Bilder als Bilder


    Editable: 1


    Owner: B-N-230315-125945


    Creation: 1427114175


    Category: KFZ


    Issue: Angebotsart A



    MONI




    Beispielsdatensatz aus blob:




    O:7:"Message":8:{s:11:" * Headline";s:4:"kfza";s:7:" *
    Body";s:8:"kfzatest";s:9:" * Images";a:6:{s:4:"data";s:4576:"ÿØÿà
    JFIF ` ` ÿÛ C ÿØÿà JFIF ` ` ÿÛ C ÿØÿà JFIF ` ` ÿÛ C


    ... Das sind die Bilddaten, habe die mal eingekürzt. ...


    ";s:4:"type";i:2;s:4:"size";i:4576;s:5:"width";i:1
    15;s:6:"height";i:145;s:4:"name";s:11:"front.jpg"; }s:11:" *
    Editable";b:1;s:8:" * Owner";s:17:"B-N-230315-125945";s:11:" *
    Creation";i:1427114175;s:11:" * Category";s:3:"KFZ";s:8:" *
    Issue";s:13:"Angebotsart A";}






    Mit meinem Code (weiter unten) krieg ich folgendes angezeigt:




    Message


    kfza


    kfzatest


    Array


    (


    [data] => ÿØÿà




    Den Rest des Zeichensalats hab ich mal weggelassen.




    (¢€ (¢€?ÿÙ


    [type] => 2


    [size] => 4576


    [width] => 115


    [height] => 145


    [name] => gesicht.jpg


    )




    1


    B-N-230315-125945


    1427114175


    KFZ


    Angebotsart A








    Mein php-Code:

  • BLOB ist binary.
    Was auch immer nun da drin steck, wird sicherlich so reingeschickt worden sein:

    SQL
    INSERT INTO `tbl` SET `blobcolumn` = BINARY('hier ist mein text oder was auch immer ...');


    Beim Auslesen kann man zB CONVERT nutzen (~aus binary wird ein string):

    SQL
    SELECT `irgendwas`, `nochwas`, CONVERT(`blobcolumn` USING utf8) AS `blobcolumn` FROM `tbl`;


    Der String, den Du nun rausbekommst, wird sicherlich encoded sein (json_encode, serialize, ... ?)
    also musst Du das rückgängig machen (json_decode, unserialize, ... ?).

  • Hi
    eigentlich gibts keine Hinweise und wir haben nur die DB-Tabelle.


    Vllt. nutzt dieser Scriptfetzen, den ich gestern in einem readme (backend: storing_fetching_data_Images) gefunden habe. Es deutet allerdings entgegen Deiner Vermutung alles auf base64_encoding hin.
    Mehr gibts aber nicht. Kann sein das es noch mehr readmes gab, aber ich habe nichts mehr.


  • Ok.
    Die Zeilen:

    PHP
    $o = unserialize($ret['data']);
        // Note: format can change if we need multiple images!
        $image = $o->Images;
        $image['type'] = image_type_to_mime_type($image['type']);
        $image['data'] = base64_encode($image['data']);
        print json_encode($image);


    sagen mir, dass in dem blob-Datensatz in der db:

    Code
    O:7:"Message":8:
        {s:11:" * Headline";s:4:"kfza";s:7:" * Body";s:8:"kfzatest";s:9:" * Images";a:6:
            {s:4:"data";s:4576:"ÿØÿà JFIF ` ` ÿÛ C ÿØÿà JFIF ` ` ÿÛ C ÿØÿà JFIF ` ` ÿÛ C


    ... das offset "data" die Bilddaten enthält -- war ja vorher schon klar.


    Was mich verwirrt ist, dass die Methode fetchMesgImage() (also ~hole/lade Bild)
    die Daten ("data") als base64_encode() (ENcode) zurückgibt.
    Das würde wohl heißen, dass die Bilddaten NICHT encoded wurden, als sie in die db geschrieben wurden.


    Das print lässt vermuten, dass diese Methode die Bilddaten direkt zurückgibt / in das Dokument schreibt.
    Und json_encode() sagt mir, dass die daten wohl für einen ajax call genutzt werden/wurden.


    Kurz: die Bilddaten in der db auf dem offset "data" sind offensichtlich Rohdaten des Bildes.


    Darstellung:
    Du hast geschrieben, dass Du folgendes als array bekommst:


    Dann sollte das hier funktionieren:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!