Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/10/2011, 13h30   #1
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : 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 : 1
Points : 1
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 :
UPDATE myTable SET pictureData = (SELECT * FROM OPENROWSET(BULK 'myFileAdress.jpeg', SINGLE_BLOB)AS x ) WHERE
Je lit ces données comme ça:

Code :
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 :
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
Type de fichier : png bad.png (95,1 Ko, 6 affichages)
Type de fichier : png good.png (69,1 Ko, 4 affichages)
Phoenix132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2011, 05h41   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Quel est le type de la colonne pictureData ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 13h01   #3
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : 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 : 1
Points : 1
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, @+
Phoenix132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 13h57   #4
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

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

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
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à
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h09   #5
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : 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 : 1
Points : 1
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.
Phoenix132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h16   #6
Membre émérite
 
Homme Serge RUQUET
Consultant informatique
Inscription : août 2006
Messages : 669
Détails du profil
Informations personnelles :
Nom : Homme Serge RUQUET
Âge : 50
Localisation : France

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

Informations forums :
Inscription : août 2006
Messages : 669
Points : 840
Points : 840
si tu veux savoir si cela vient de la base, écrit ceci:

Code :
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
__________________
Errare humanum est, perseverare diabolicum (Sénèque)
serge0934 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h55   #7
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : 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 : 1
Points : 1
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.
Phoenix132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web