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 :

[PHP - MSSQL] Problème d'upload / binaire


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut [PHP - MSSQL] Problème d'upload / binaire
    Bonjour,

    Je récupère des données à partir d'un formulaire classique. Parmi ces données un fichier, qui est correctement uploadé et lu.

    Après avoir récupéré et traité les données, et après avoir récupéré le contenu binaire du fichier, je dois l'insérer dans une base de données SQL Server, via une connexion ODBC.

    Le problème, c'est que dès lors que je valide le formulaire, j'obtiens l'erreur suivante :
    PHP Warning: odbc_exec(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Ouvrez les guillemets avant la chaîne de caractères 'ÿØÿà'., SQL state 37000 in SQLExecDirect in LeFichier

    où ÿØÿà est le début du contenu binaire du fichier.

    Si je remplace ce contenu par une chaine quelconque, tout fonctionne normalement. Il y a donc un problème avec le binaire...

    Si quelqu'un pouvait m'aider...

    Par avance, merci !

    Cordialement.

  2. #2
    Membre actif
    Avatar de doof
    Inscrit en
    Août 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 160
    Points : 294
    Points
    294
    Par défaut
    Salut, ÿØÿà => jpeg ?

    c'est surement un problème d'échappement (le binaire pouvant contenir n'importe quel caractère).

    Il faudrait donc utiliser addslashes() ou un équivalent pour ton sgbd.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta suggestion. J'ai malheureusement déjà suivi cette piste :
    - addslashes n'a aucun effet (de toutes façons, le magicquote GPC est activé (ce qui n'est pas bien à mon goût d'ailleurs))
    - l'échappement de ce sgbd (doubler les ') n'apporte pas de solutions non plus...

    C'est probablement un problème lié au binaire, mais lequel... C'est d'autant plus étonnant qu'il me demande d'ouvrir les guillemets avant l'expression...

    Enfin... Merci Doof.

  4. #4
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 274
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 274
    Points : 1 991
    Points
    1 991
    Par défaut
    Montre nous le code pour insérer ton contenu binaire.
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Salut Bidouille.

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    //lecture du fichier
    $pointeur=fopen($_FILES['fichier']['tmp_name'],"rb");
    $contenuFichier="";
    while (!feof($pointeur)){
    	$contenuFichier .= fread($pointeur,8192);
    }
    fclose($pointeur);
    $contenuFichierMd5=md5($contenuFichier);
    $contenuFichier=str_replace("'","''",$contenuFichier);
    (...)
    //envoi du message
    $connexion = odbc_connect($dbDsn,$dbUsername,$dbPassword);
    $sql = "INSERT INTO maTable(
    mes_AttachmentFileName,
    mes_AttachmentMimeType,
    mes_AttachmentMD5Sum,
    mes_Attachment
    )VALUES(
    '".$_FILES['fichier']['name']."',
    '".$_FILES['fichier']['type']."',
    '$contenuFichierMd5',
    '$contenuFichier'
    )";
    //echo $sql;
    $sql=stripslashes($sql);
    $resultat = odbc_exec($connexion,$sql);
    odbc_free_result($resultat);
    odbc_close($connexion);
    Merci !

  6. #6
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 274
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 274
    Points : 1 991
    Points
    1 991
    Par défaut
    C'est quoi ce bazar dans $contenuFichier ?
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bein quel bazar !?!?

    D'abord on l'intitialise, puis on lui assigne le contenu du fichier lu (ça, ça marche)
    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenuFichier=str_replace("'","''",$contenuFichier);
    sert à échapper les ' (sous SQL Server, c'est pas \ : ce serait trop simple ;-) )
    Et ensuite, la requête.

    Le problème, c'est que l'échappement avec str_replace ne semble pas suffire...

    @+

  8. #8
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 274
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 274
    Points : 1 991
    Points
    1 991
    Par défaut
    Utilise plutôt file_get_contents
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Effectivement, tu as raison, c'est bien mieux et plus rapide.
    Cependant, ça ne résoûd pas mon problème.

    J'ai en partie résolu mon problème en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenuFichierereg_Replace("'","''",$contenuFichier);
    Mais maintenant, le fichier en sortie de base se limite systèmatiquement à 81 octets... Alors qu'il est inséré dans un champ image.

    C'est assez étonnant tout ça... Ainsi, avec SQL Server, les requêtes seraient limitées ?

  10. #10
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 274
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 274
    Points : 1 991
    Points
    1 991
    Par défaut
    Ton problème n'est plus vraiment PHP mais SQL/Server. Je transfère.
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Effectivement du coup...
    Merci Bidouille !

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    ODBC n'accepte pas plus de 8Ko de données par ligne dans les ordres SQL. D'ou le tronquage.

    Pour ce faire il faut utiliser des pointeurs et les méthodes READTEXT et WRITETEXT. Lire la doc à ce sujet...

    Sinon, attendre la version 2005 et utiliser OleDB qui permet le pasage de flux de 2 GO.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cette réponse Frédéric !
    Certe, ce n'est pas forcément une bonne nouvelle pour moi, mais au moins je suis fixé.
    Je me remets donc au travail de ce pas, sur cette nouvelle piste !
    Encore merci !

    Bien cordialement,

    Noise

Discussions similaires

  1. PHP problème d'upload étrange
    Par Idleman dans le forum Langage
    Réponses: 6
    Dernier message: 14/03/2012, 14h24
  2. [MySQL] Problème d'upload SQL PHP
    Par max1395 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/03/2011, 15h17
  3. problème upload binaire
    Par Invité(e) dans le forum ASP
    Réponses: 0
    Dernier message: 04/06/2008, 12h10
  4. [PHP-JS] Problème d'upload php
    Par sonja dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2007, 11h56
  5. [Class/PHP/Postgres] Problème de modélisation...
    Par k-reen dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/02/2003, 08h49

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