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 :

Erreur d'insertion Sql Server, chaine non formatée [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Erreur d'insertion Sql Server, chaine non formatée
    Bonjour,
    Je suis en train de faire migrer un site de Windows à Linux.
    Le site utilise une base de donnée sql server 2005.

    Dans cette base, j'ai une colonne, (de type ntext), d'une table qui contient le contenu de photo. (Uploadé par l'utilisateur et modifiée avec imagecreatefromjpeg() et enregistrées tel quelle dans la base).

    Pour les insérer sous Windows, j'utilisais la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sqlsrv_query( $conn, $query, $params)
    .Php adaptait automatiquement la chaine pour que l'insertion, ou l'update se passe sans problème.
    Or sous linux, j'ai essayer avec plusieurs fonctions, dont celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sth = $pdo->prepare('Update Visiteurs set Photo=?');
    	$sth->bindParam(1, $img, PDO::PARAM_INT);
    	$sth->execute();
    Mais là, php n'adapte pas la chaine. M'indiquant une erreur "Incorrect syntax near".
    J'ai essayer avec des functions type str_replace(" ' "," '' ",$img), mais l'image ne s'affichait plus correctement après.
    Je précise que d'autres applications utilisent aussi cette base, et qu'il m'ai donc pas possible de changer le type de donnée de la colonne.

    Si quelqu'un a une piste, ou une solution pour m'aider je suis preneur...
    Merci à tous

  2. #2
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    je suppose que $img représente le nom du fichier avec le chemin !

    si c'est du style "c:\repertoire_image\nom_image.jpg" sous windows
    sous linux ce sera du style "usr/repertoire_image/nom_image.jpg"

    ton problème viens peut être du "/"

    fait un var_dump($img); pour afficher le contenu, idem sous windows et compare
    les résultats pour identifier la différence
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.
    $img contient le contenu de l'image(les caractères qu'on obtient quand on ouvre l'image avec un éditeur de texte), et non son chemin d'accès.
    Et dans la variable il y a plein de caractères spéciaux, de se type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ÿØÿàJFIFÿþ;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 60 ÿÛC      ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROÿÛC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOÿÀ0–"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤
    c'est le début de l'image, donc de ma variable $img
    et ' qu'il faut garder intacte.
    Si je fais un var_dump($img), j'obtiens le même résultats sur les 2 OS.

  4. #4
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    $img=str_replace("'","\'", $img); (avant d'enregistrer dans la DB)
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oui, j'avais essayer avec str_replace, ou même addslashes(). même avec l'une ou l'autre, l'update bloque et m'affiche le même message d'erreur " Incorrect syntax near 'ÿØÿà' "

    Sinon, se ne serait pas possible de convertir $img en Hexa, de l'envoyer, et de demander à sql server de convertir avant d'insérer ?

    ps: pour échapper les ' sous ms sql il faut les doubler, pas mettre d’antislashs devant.

  6. #6
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    et si tu change

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $pdo->prepare('Update Visiteurs set Photo=?');
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $pdo->prepare('Update Visiteurs set Photo="?"');
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Si je mets des simples ou doubles quotes autour du ?, il considère le ? comme une chaine de caractère, et non comme le paramètre que je lui passe.

  8. #8
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    le 1 ne dévrait-t-il pas etre un string 's' ou un 'b' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$sth->bindParam(1, $img, PDO::PARAM_INT);
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai pas réussi en utilisant php. pourquoi ... je sais pas. J'ai fais un petit prog en java, et je l'appel avec le php pour uploader l'image. et sa marche sans soucis.

    Merci de ton aide en tout cas.

  10. #10
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    pas de quoi.
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

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

Discussions similaires

  1. Erreur en Insert SQL-Server
    Par soumbol dans le forum Développement
    Réponses: 9
    Dernier message: 24/05/2011, 22h06
  2. [SQL-SERVER] Configurer le format de date
    Par Angath dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/09/2010, 14h15
  3. [SQL Server] Probleme de format de date
    Par flydragon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2006, 17h49
  4. Récupérer les données Insert - SQL Server 2000
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/04/2006, 07h47
  5. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09

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