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 :

Requête et caractère spécial "


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Requête et caractère spécial "
    Bonjour,

    J'ai crée ma première base avec SQL Server 2000.J'utilise php pour attaquer cette base.

    Voilà une requête qui me pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $link = mssql_connect("10.1.6.14","xxxxx","xxxx")or die(" connexion impossible");
    mssql_select_db('[production]', $link);
    $requete="UPDATE intervention SET commentaire = \"".addslashes($_POST['comm_modif'])."\", date_cloture=\"$aujourdhui à $now\", validation=\"".$_POST['cloturer']."\" WHERE id=7990";
    $result = mssql_query( $requete );
    mssql_close();
    ?>
    Je ne pense pas avoir d'erreurs au niveau de la synthaxe, mais si $_POST['comm_modif'] contient des guillemets l'exécution de la requête est impossible. Pourtant addslashes les protège bien.

    Avez-vous des idées ?

    Merci à bientôt !

    Antoine

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Voilà le résultat à l'éxécution :

    Ma requête :
    UPDATE intervention SET commentaire = "Tentative d\'enregistrement avec des guillemets \"\" !", date_cloture="23/08/2006 à 09:29:29", validation="Oui!" WHERE id=7986

    Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers '\'. (severity 15) in d:\weblocal\interventions\index_.php on line 288
    Warning: mssql_query(): Query failed in d:\weblocal\interventions\index_.php on line 288

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    je ne pense pas que le " pose de probleme par contre les simples quotes (') etant le séparateur de text de SQL forcément ca va planter.

    Pour éviter ca au lieu de les faire précéder de \ double les

    set toto = 'l''hopital'

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut


    Sympa d'avoir répondu

    Résultat sans mettre de simple quote:

    Ma requête :
    UPDATE intervention SET commentaire = "Tentative \"d enregistrement\" avec des guillemets !\"", date_cloture="23/08/2006 à 10:07:53", validation="Oui!" WHERE id=7986

    Warning: mssql_query(): message: Ligne 1 : syntaxe incorrecte vers 'd'. (severity 15) in d:\weblocal\interventions\index_.php on line 288

    Warning: mssql_query(): message: Ouvrez les guillemets avant la chaîne de caractères ' WHERE id=7986'. (severity 15) in d:\weblocal\interventions\index_.php on line 288

    Warning: mssql_query(): Query failed in d:\weblocal\interventions\index_.php on line 288


    C'est dingue, même en les protègeant ça ne passe pas !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    c'est l'inverse qu'il faut faire. Tu vires les \, et tu doubles les '

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    declare @test varchar(100)
    set @test = 'Tentative d''enrgistrement des'

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    UPDATE intervention
    SET commentaire =' "Tentative \"d enregistrement\" avec des guillemets !\"", date_cloture="23/08/2006 à 10:07:53", validation="Oui!" '
    WHERE id=7986

    il faut placer ta chaine entre simple quote pour que SQL comprenne que c est une chaine de caractere
    par contre a quoi serve tes slashs ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    C'est addslashes() qui me les place dans la chaine pour justement protéger les caractères spéciaux. Manifestement, ça n'a pas d'effets avec SQL Server !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    non pour protégé une quote en sql serveur il faut la doubler, par contre c'est valable pour les quotes dans une chaine de caractere mais une chaine de caractere reste délimité par une simple quote au début et une simple quote a la fin.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Ok merci !

    J'ai pas l'habitude avec SQL Server encore :p

    Merci pour vos interventions !

    Antoine

  10. #10
    Candidat au Club
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    je me permets de rajouter une petite question...

    Existe-t-il une fonction SQL qui assurerait ce double quote sur toute la chaine de caractère d'une variable ?

    (un peu comme la fonction addslashes en PHP, car en gros j'ai un texte à insérer dans ma BD et ca plante des qu'il y a un apostrophe)

    Merci d'avance

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    nop je ne pense pas, il faut le faire dans ton code

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Bonjour !

    Donc justement pour éviter les soucis avec les simples quotes, je formate ma requête de la façon suivante :


    $chaine="UPDATE matable SET champ = '".ereg_replace("'", "''", $_POST['comm_modif'])."' WHERE identifiant=x";

    ereg_replace() va remplacer toutes les occurences des ' et les remplacer par ''.
    Du coup je pense qu'à l'instar d'addslashes, cela nous protège aussi des injections SQL

    A bientôt sur cet exellent forum

    Antoine

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

Discussions similaires

  1. Caractère spécial dans une requête
    Par seroa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2009, 08h16
  2. [SQL] Affichage requête caractère spécial
    Par Nemesis007 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/03/2008, 14h59
  3. Réponses: 4
    Dernier message: 10/04/2007, 11h10
  4. Pb masquer caractère spécial
    Par cosminutza dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/11/2004, 11h27
  5. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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