IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Enregistrement d'une image en base de données


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Enregistrement d'une image en base de données
    Bonjour, voici mon problème:

    J'ai une image enregistrée en base de données avec cette méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE myTable SET pictureData = (SELECT * FROM OPENROWSET(BULK 'myFileAdress.jpeg', SINGLE_BLOB)AS x ) WHERE
    Je lit ces données comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $myData = $myConnection->query('Select pictureData from myTable where …');
    $row = $myData->fetch(PDO::FETCH_ASSOC);
    echo @pack('H*', $row['pictureData'])
    D'un autre côté, j'essaie de lire directement cette image avec un script Php comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $data = fopen ($myPictureAdress, 'rb');
    $size = filesize ($picture);
    echo fread ($data, $size);
    Et en fait le souci vient du fait que certain octet ('0') se place dans l'enregistrement en base de données et corrompt ainsi mon image comme vu dans les 2 copies d'écran ci-joint.

    Est-ce que quelqu'un sait pourquoi ces octets se mette à cet endroit? Est-ce que la requête est correcte?

    Merci à tous ceux qui pourrai s'intéressai à ce problème.

    Pour information, j'utilise sql server 2005 / IIS / PHP
    Images attachées Images attachées   

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Quel est le type de la colonne pictureData ?

    @++

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Désolé de ne réagir que maintenant, le type de la colonne pictureData est varbinary(max). Ce n'est bien sûr pas une clé primaire/étrangère ou autre.

    Merci, @+

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    j'ai utilisé cette librairie l'année dernière pour autre chose que des images ( des logins en varbinary aussi) et j'avais des pb sous IE alors que cela fonctionnait très bien sous Firefox.

    PDO::FETCH_ASSOC

    le collègue qui écrivait le PHP m'a dit que la librairie PDO était buggée de base et qu'il fallait une version 5 et quelque chose au mini pour que cela fonctionne.
    Je suis DBA et pas expert PHP mais je pense que si j'étais à ta place, je regarderai de ce coté là

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    j'ai utilisé cette librairie l'année dernière pour autre chose que des images ( des logins en varbinary aussi) et j'avais des pb sous IE alors que cela fonctionnait très bien sous Firefox.
    Disons que ce problème vient de manière intrinsèque sur l'image, De plus IE et FF me sorte la même chose.

    Citation Envoyé par serge0934 Voir le message
    PDO::FETCH_ASSOC

    le collègue qui écrivait le PHP m'a dit que la librairie PDO était buggée de base et qu'il fallait une version 5 et quelque chose au mini pour que cela fonctionne.
    Cette idée est intéressante, mais je suis déjà en version 5.3.5 de Php. Après à savoir quel 'chose' il faut en plus...?

    Merci dans tous les cas.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    si tu veux savoir si cela vient de la base, écrit ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    declare @mon_img varbinary(max);
    UPDATE myTable SET pictureData = (SELECT * FROM OPENROWSET(BULK 'myFileAdress.jpeg', SINGLE_BLOB)AS x ) WHERE ID_table=X
     
    select @mon_img=pictureData from myTable Where ID_TABLE=X
     
    -- créé un enregistrement avec ID_table = Y
     
    UPDATE myTable SET pictureData =@mon_img from myTable Where ID_TABLE=Y
    puis appelle les deux enregistrements avec ton php et regarde s'il y a une différence

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai la même chose. J'aimerai dire que la faute est au Php, mais j'en suis même pas sûr. En tous cas, ça vient de la récupération de la donnée à l'envoi au Php, peut-être une incompatibilité entre les deux.

Discussions similaires

  1. telechargement d'une image de base de données sqlserver
    Par meriemabdel dans le forum VB.NET
    Réponses: 0
    Dernier message: 22/02/2010, 20h49
  2. Sauvegarder un enregistrement dans une table de base de données
    Par souha2008 dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/05/2008, 17h43
  3. inserer une image dans base de données ?
    Par ouldfella dans le forum Requêtes
    Réponses: 7
    Dernier message: 20/12/2006, 16h04
  4. [MySQL] Stocker une image en base de données
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/03/2006, 22h51
  5. [MySQL] insertion d'une image en base de données
    Par SENCABOY dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/02/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo