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

PHP & Base de données Discussion :

Quel format de données pour insérer un pdf dans un champ BLOB ? [SQL-Server]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut Quel format de données pour insérer un pdf dans un champ BLOB ?
    Bonjour,

    dans le cadre d'un projet php, il m'est imposé de coder cette opération.
    (Pour avoir fait de nombreuses recherches sur les champs blob, je sais que cela n'est pas conseillé mais ce n'est pas moi qui décide.)

    J'arrive à récupérer le contenu du champ et à recomposer un pdf valide, mais pour l'opération d'insertion je n'y parviens pas.


    Environnement : PHP + SQL SERVER

    Voici la fonction qui exécute la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function updateDocument($idDocument, $content) {
     
        //$req = "UPDATE DOCUMENTS SET BLOB = (SELECT BULKCOLUMN FROM OPENROWSET(BULK 'documents/marge.pdf', SINGLE_BLOB) AS I) WHERE ID_DOCUMENT = $idDocument";
        $req = "UPDATE DOCUMENTS SET BLOB = '$content' WHERE ID_DOCUMENT = $idDocument";
     
        $res = ConnectionDb::$myPdo->exec($req);
        return $res;
    }
    Comme vous pouvez voir j'ai testé deux requetes différentes car bulk fonctionnait sous un autre projet en vb.net mais ici c'est différent et cela ne fonctionne pas.
    Le fichier se trouve sur le serveur wamp local pour le développement, dans le répertoire du site, et je n'ai pas mis le chemin complet depuis C:\ car il faudrait qu'il soit trouvé quelque soit le type de serveur.

    La deuxième requete me parait être la plus indiquée mais je bute sur le format de données à envoyer.
    Pour la réception de fichier il s'agit d'une chaine en hexadécimal, mais quand j'effectue l'update avec la nouvelle chaine en hexa, cela stocke simplement une chaine en hexa dans le blob et non un pdf valide.
    J'ai cherché partout et testé différents types mais pas de résultat..*

    Auriez vous la réponse svp ?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut
    je m'aperçois que lorsque j'envoie la chaine en hexadecimal dans le blob, le résultat visible avec SQL management studio, est une chaine en décimal alors que les pdf envoyés par mon application VB.net avec openrowset (et valides) affichent une chaine en hexadecimal...

    lorsque j'envoie les données sans conversion, à la sortie de la fonction php "file_get_contents" , ça ne fonctionne pas je pense à cause de tous les caractères spéciaux, et si j'essaye de les enlever avec d'autres fonctions le fichier n'est pas bon non plus...

    je m'arrache les cheveux ^^

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    as-tu essayé d'échapper $content avant insertion ?
    Un truc du genre : $pdo->quote($content);ou carrément utiliser une requête préparée ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 16
    Par défaut
    Merci de bien vouloir m'aider.

    Pour l'échappement j'ai tenté cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "UPDATE DOCUMENTS SET BLOB = '".ConnectionDb::$myPdo->quote($content)."' WHERE ID_DOCUMENT = $idDocument";
    Cela n'a pas fonctionné. Est-elle correcte?


    Pour ta deuxième proposition je ne sais pas trop encore en quoi cela consiste, je vais me pencher dessus..

  5. #5
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut, que contient $content ?
    Tu parles de chaîne hexa mais comment tu l'obtiens cette chaîne là ?
    Tu peux aussi regarder ici http://php.net/manual/fr/pdo.lobs.php tu pourra avoir sûrement des pistes

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Un blob attends un contenu binaire.
    Donc ton $content devrait le contenu de ton pdf obtenu par exemple avec $content = file_gets_content('monfichier.pdf') .
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/07/2014, 11h47
  2. Réponses: 4
    Dernier message: 12/07/2010, 19h48
  3. quel etl peut faire ca : charger un pdf dans une colonne BLOB
    Par sulfurex dans le forum Alimentation
    Réponses: 0
    Dernier message: 09/04/2010, 10h01
  4. Comment fait-on pour insérer une date dans un champs DateTime
    Par gibea00 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/01/2007, 01h04
  5. Probléme pour insérer une variable dans un champs
    Par BOUTRAIS dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 22h45

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