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à.
    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
      1. Juste avant de partir, j'avais vu une fonction <code mysql_real_escape_string</code>.
        Ca pourrait marcher avec ça aussi non ?
        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.
        2. @totoAutant pour moi alors. Je ne l'utilise pas.
      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.
        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+
          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.
            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