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 :

Problèmes de guillemets et quotes dans un INSERT


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 64
    Points
    64
    Par défaut Problèmes de guillemets et quotes dans un INSERT
    Bonne nuit

    Je me bats avec PHP et SQL Serveur, pour essayer d'inserer une chaine dans ma base de donnée de manière securisée.

    La chaine en question :

    Residence " Les Jeux d'O "
    Je souhaite eviter les SQL INJECTION ... Le probleme c'est que je suis sous SQL Serveur et pas moyen d'utiliser mysql_real_escape_string(),

    Je me perds dans les ' et " dans mon INSERT et au final ca marche pas, si qqu a une idée ?

    MERCI de votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    normallement ton seul probleme serais le simple quote puisque c la seul syntax officiel de SQL.
    apres fo pas melanger PHP et SQL Server. Il faut se dire PHP va mon pondre une chaine comme ca et qui sera transmit à SQL serveur.

    Coté php tu fait ce que tu veux, mais au final, voila ce qu'il faut transmettre à SQL serveur par exemple:
    INSERT INTO table ( nom, prenom ) VALUES( 'BUI', 'Nicolas' );

    Donc il faut savoir comme se comporte une chaine en PHP. une chaine en php peut avoir deux type de délimitateur " (double) et ' (simple).
    $s = 'Ma chaine';
    $s = "Ma chaine";


    Dans une chaine delimité par un simple quote pour faire apparaitre un simple quote, on place un antislash:
    $s = '-- J\'suis la --';
    idem pour la double
    $s = "Bienvenu Nicolas, alias le \"BOSS\" !";

    supposons que qu'on insere une phase ds la base:
    J'suis nicolas bui

    d'abord, il fo choisir en php si on entoure avec des simples des doubles.
    $s = "J'suis nicolas bui";
    ou
    $s = 'J\'suis nicolas bui';
    donc en sortie on a ==> J'suis nicolas bui

    Mais maintenant on le balance dans le SQL :
    $sql ="INSERT INTO .... ( '". $s ."' )";
    cela donne : INSERT INTO ... ( 'J'suis nicolas bui' )
    Aucun SGBD n'aime ... il faut faire soit doubler le simple quote :
    INSERT INTO ... ( 'J''suis nicolas bui' )
    ou foutre un anti slash :
    INSERT INTO ... ( 'J\'suis nicolas bui' );

    donc en php
    $sql ="INSERT INTO .... ( '". str_replace( "'", "''", $s ) ."' )";
    ou
    $sql ="INSERT INTO .... ( '". str_replace( "'", "\\'", $s ) ."' )";

    Et normallement ca passe
    Nicolas BUI

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 147
    Points
    147
    Par défaut
    Donc pour ton :
    Residence " Les Jeux d'O "

    on doit avoir
    INSERT ... ( 'Residence " Les Jeux d''O "' )
    ou
    INSERT ... ( 'Residence " Les Jeux d\'O "' )

    coté php
    $s = "Residence \" Les Jeux d'O \"";
    puis
    $sql = "INSERT ... ( '" . str_replace( "'", "''", $s ) . "' );";
    ou
    $sql = "INSERT ... ( '" . str_replace( "'", "\'", $s ) . "' );";

    Voila bonne chance
    Nicolas BUI

Discussions similaires

  1. [AC-2003] Problème de correspondance d'id dans une insertion
    Par Flop1908 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/02/2012, 13h34
  2. Réponses: 9
    Dernier message: 25/02/2009, 17h36
  3. [SQL] Problème de guillemets dans un INSERT INTO SELECT
    Par Lenezir dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/02/2008, 14h21
  4. problème avec un tableau dans un insert ...
    Par vbcasimir dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h31
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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