Caracteres " ' " en SQL + PHP

Bonjour,
J'ai un petit soucis. Je souhaite faire un INSERT dans une base MySQL en PHP.
Le problème est qu'il y a des caractères " ' " dans mes valeurs... Par exemple "L'HOMME'.
Donc forcément, j'ai des erreurs...
J'ai utilisé str_replace de la façon suivante :
INSERT INTO maTable (Champs) VALUES '$data[NOM]=str_replace("'","\'",$data[NOM])';

Mais lorsque j'exécute ma requête, je retrouve dans ma base les "\". Ce qui est normal !

J'aimerais savoir s'il n'y aurait pas une façon de contourner cette erreur ?

Merci d'avance !

7 réponses

  1. Bonjour,

    en fait il faut que tu fasses une p'tite combine, qui va te rajouter/enlever des slashs devant tes caractères spéciaux.
    $champs = addslashes($champs); 
    
    INSERT INTO maTable (Champs) VALUES ' " .champs. " ';
    
    Par la suite pour tes SELECT, tu feras:
    
    $champs = stripslashes($champs); 


    Voilà.
    0
    1. Ok, merci pour la réponse.
      J'essaierais ça demain car la je commence à en avoir marre ! Je rentre chez moi !! ;-)

      Je te dirais si j'y arrive
      0
      1. Juste avant de partir, j'avais vu une fonction <code mysql_real_escape_string</code>.
        Ca pourrait marcher avec ça aussi non ?
        0
        1. Bonjour

          Oui ça marche, ça sert même précisément à ça. En plus, ça résout d'autres cas que celui de l'apostrophe (retour chariot/fin de ligne par exemple), et tu n'as pas de stripslashes à faire quand tu relis tes champs.
          Tout bénef.
          0
        2. @totoAutant pour moi alors. Je ne l'utilise pas.
          0
      2. Non je ne penses pas ;) Ca sert à autre chose.

        N'oublies pas de mettre "Résolu" si ça fonctionne.

        Bonne fin de journée.
        0
        1. Bon ça fonctionne, merci beaucoup.
          C'est un peu contraignant je trouve, car il faut l'utiliser pour toutes les requetes SQL (et j'en est beaucoup : une centaine entre les INSERT, UPDATE et les SELECT), mais ça marche !

          Merci encore et A+
          0
          1. Bah tu les mets juste pour les champs textes, et pas les autres. Après si tu as énormement de champs, c'est sur c'est contraignant.
            0
            1. sinon si tu utilise la librairie adodb pour connecter php à ta base de données, elle dispose d'une fonction (qstr) qui permet de gérer automatiquement les caractères à mettre entre guillemets ou pas. tu passes tout par cette fonction et comme ça tu es sur de ne jamais avoir de soucis
              0