Ankündigung

Einklappen
Keine Ankündigung bisher.

MS SQL Jpeg speichern und auslesen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MS SQL Jpeg speichern und auslesen

    Hallo liebe Community,

    ich habe viel mit MySql und PHP gearbeitet, neige jetzt aber immer mehr dazu mit MS SQL zu arbeiten, da viele DBs schon vorhanden sind und auf Erweiterungen warten.

    Folgendes Problem stellt sich mir und ich hoffe ne Lösung zu finden.
    Ich habe ein Skript unter PHP und Mysql gehabt mit dem ich Bilder in einen LONGBLOB schreiben kann und es danach auch erfolgreich wieder ausgeben kann.

    Unter MSSQL funktioniert das auslesen net mehr, das Bild wird einfach nicht angezeigt?

    Hier das Skript zum Hochladen des Bildes:
    PHP-Code:
     
    <form method="post" enctype="multipart/form-data">
    <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr> 
    <td width="246">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input name="fichier" type="file" id="fichier"> 
    </td>
    <td width="80"><input name="upload" type="submit" class="box" id="upload" value=" Upload "></td>
    </tr>
    </table>
    </form>
    <?
    $upload = $_REQUEST[upload];
    if ($upload) 
    {
    $nom_file = $_FILES['fichier']['name']; 
    $taille = $_FILES['fichier']['size']; 
    $tmp = $_FILES['fichier']['tmp_name']; 
    $type = $_FILES['fichier']['type']; 
    $tmp = $_FILES['fichier']['tmp_name']; 
    $size = filesize($tmp);
    set_magic_quotes_runtime(0);
    $img_binaire = base64_encode(fread(fopen($tmp, "r"), $size)); 
    mssql_connect("10.162.121.200\sql","sa","daspasswort");
    mssql_select_db("database");
    $resultat=mssql_query("INSERT INTO images (imgdata) VALUES ('$img_binaire')");
    }
    ?>
    Hier das Skript zum auslesen:
    PHP-Code:
     <?
    mssql_connect("10.162.121.200\sql","sa","daspasswort");
    mssql_select_db("mpit");
    $resultat=mssql_query("select imgdata from images");
    $enreg=mssql_fetch_array($resultat);
    echo base64_decode($enreg[0]);
    ?>

    Wo ist der Fehler? Wie gesagt unter MySQL funktioniert das Skript einwandfrei.


  • #2
    Zitat von DannyBoyXX Beitrag anzeigen
    Hallo liebe Community,

    ich habe viel mit MySql und PHP gearbeitet, neige jetzt aber immer mehr dazu mit MS SQL zu arbeiten, da viele DBs schon vorhanden sind und auf Erweiterungen warten.

    Folgendes Problem stellt sich mir und ich hoffe ne Lösung zu finden.
    Ich habe ein Skript unter PHP und Mysql gehabt mit dem ich Bilder in einen LONGBLOB schreiben kann und es danach auch erfolgreich wieder ausgeben kann.

    Unter MSSQL funktioniert das auslesen net mehr, das Bild wird einfach nicht angezeigt?

    Hier das Skript zum Hochladen des Bildes:
    PHP-Code:
     
    <form method="post" enctype="multipart/form-data">
    <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr> 
    <td width="246">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input name="fichier" type="file" id="fichier"> 
    </td>
    <td width="80"><input name="upload" type="submit" class="box" id="upload" value=" Upload "></td>
    </tr>
    </table>
    </form>
    <?
    $upload = $_REQUEST[upload];
    if ($upload) 
    {
    $nom_file = $_FILES['fichier']['name']; 
    $taille = $_FILES['fichier']['size']; 
    $tmp = $_FILES['fichier']['tmp_name']; 
    $type = $_FILES['fichier']['type']; 
    $tmp = $_FILES['fichier']['tmp_name']; 
    $size = filesize($tmp);
    set_magic_quotes_runtime(0);
    $img_binaire = base64_encode(fread(fopen($tmp, "r"), $size)); 
    mssql_connect("10.162.121.200\sql","sa","daspasswort");
    mssql_select_db("database");
    $resultat=mssql_query("INSERT INTO images (imgdata) VALUES ('$img_binaire')");
    }
    ?>
    Hier das Skript zum auslesen:
    PHP-Code:
     <?
    mssql_connect("10.162.121.200\sql","sa","daspasswort");
    mssql_select_db("mpit");
    $resultat=mssql_query("select imgdata from images");
    $enreg=mssql_fetch_array($resultat);
    echo base64_decode($enreg[0]);
    ?>
    Wo ist der Fehler? Wie gesagt unter MySQL funktioniert das Skript einwandfrei.


    Du hast ein Bild, ohne Pfad aus der DB gelesen, gewöhnlich hast du per Browser kein Zugriff auf das Server-Temp

    Das Bild muss erstmal an einen Platz, wo du mit dem Browser zugreifen kannst, nach dem auslesen aus DB müsste es dann auch wieder dort hin, oder über createImageFromJPEG nutzen......falls ich mich jetzt nicht derb verhaue
    Linux ist wie guter Sex, man kann es beschreiben oder drüber reden, man weiß erst was es bedeutet, wenn man es erlebt hat

    Kommentar


    • #3
      @breaker: Äh nein, das Bild soll gar nicht dauerhaft auf der Platte gespeichert werden, sondern in die Datenbank gespeichert und aus der Datenbank gelesen werden.

      @DannyBoyXX: Es gibt ja schon genug Diskussionen zum Thema "Bilddaten vs Dateipfad in der DB speichern". Das möchte ich Dir und mir hier ersparen
      Was wird so ausgegeben?
      PHP-Code:
      if ($upload
      {
        
      error_reporting(E_ALL);
        
      ini_set('display_errors'1);
        
      mssql_min_error_severity(4);
        
      mssql_min_message_severity(10);

        
      $nom_file $_FILES['fichier']['name']; 
        
      $taille $_FILES['fichier']['size']; 
        
      $tmp $_FILES['fichier']['tmp_name']; 
        
      $type $_FILES['fichier']['type']; 
        
      $tmp $_FILES['fichier']['tmp_name']; 
        
      $size filesize($tmp);
        
      set_magic_quotes_runtime(0);
        
      $img_binaire base64_encode(fread(fopen($tmp"r"), $size));
        
      $mssql mssql_connect("10.162.121.200\sql","sa","daspasswort");
        
      mssql_select_db("database");
        
      $resultat=mssql_query("INSERT INTO images (imgdata) VALUES ('$img_binaire')");

        echo  
      '<pre>resultat: 'var_dump($resultat);
        echo 
      'rows: ' mssql_rows_affected($mssql) . "\n" .
          
      'size: ' $size "\n" .
          
      'len($img): ' strlen($img_binaire) . "\n" .
        
      '</pre>';

      Kommentar


      • #4
        Zitat von David Beitrag anzeigen
        @breaker: Äh nein, das Bild soll gar nicht dauerhaft auf der Platte gespeichert werden, sondern in die Datenbank gespeichert und aus der Datenbank gelesen werden.
        Genau richtig, außerdem kann das eigentlich nicht der Fehler sein, da das Skript mit MySQL wunderbar funkioniert. Hatte ich aber trotzdem ausprobiert in ein img Tag einzubinden.
        Zitat von David Beitrag anzeigen
        @DannyBoyXX: Es gibt ja schon genug Diskussionen zum Thema "Bilddaten vs Dateipfad in der DB speichern". Das möchte ich Dir und mir hier ersparen
        Was wird so ausgegeben?
        PHP-Code:
        if ($upload
        {
          
        error_reporting(E_ALL);
          
        ini_set('display_errors'1);
          
        mssql_min_error_severity(4);
          
        mssql_min_message_severity(10);
         
          
        $nom_file $_FILES['fichier']['name']; 
          
        $taille $_FILES['fichier']['size']; 
          
        $tmp $_FILES['fichier']['tmp_name']; 
          
        $type $_FILES['fichier']['type']; 
          
        $tmp $_FILES['fichier']['tmp_name']; 
          
        $size filesize($tmp);
          
        set_magic_quotes_runtime(0);
          
        $img_binaire base64_encode(fread(fopen($tmp"r"), $size));
          
        $mssql mssql_connect("10.162.121.200\sql","sa","daspasswort");
          
        mssql_select_db("database");
          
        $resultat=mssql_query("INSERT INTO images (imgdata) VALUES ('$img_binaire')");
         
          echo  
        '<pre>resultat: 'var_dump($resultat);
          echo 
        'rows: ' mssql_rows_affected($mssql) . "\n" .
            
        'size: ' $size "\n" .
            
        'len($img): ' strlen($img_binaire) . "\n" .
          
        '</pre>';

        Mit den Diskussionen, ob überhaupt in ner DB zu speichern hast Recht.
        Ich habe mich persönlich dafür entschieden, da 1.die DB höchsten 1-2GB groß wird (ich weiß putzig) und 2. Das webfrontend meiner Meinung nach, so wenig wie möglich Echtdaten enthalten sollten, d.h. einmal gesichert und jut. Bin eigentlich immer dafür alle Daten in der DB abzulegen und performancetechnisch macht das bei richtigen Abfragen kein Unterschied.


        Bei Deinem Vorschlag kommt folgendes:

        Acces denied for User sa ok kleiner Scherz, ist klar

        Also:
        resultat: bool(true)rows: 1size: 516424len($img): 688568

        Kommentar

        Lädt...
        X