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

MySQL Discussion :

REPLACE ne fonctionne pas


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 73
    Par défaut REPLACE ne fonctionne pas
    Bonjour,

    J'ai un problème avec ma requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ps_product_lang SET  `description_short` = REPLACE(  `description_short` ,  "dorigine",  "d'orgine" ) WHERE  `id_product` =158
    En fait ce n'est pas vraiment un problème puisque la requête ne trouve pas "dorigine", pourtant il est bien présent voila le message que me retourne MySql :
    0 ligne affectée. (Traitement en 0.0005 sec)
    Cette requête a fonctionné pour un autre champs de ma table ou j'ai du remplacer "clef" par "clé".

    Les deux champs sont de type différents un c'est un varchar et l'autre text, étant donné que le varchar a fonctionné ce que j'en déduis c'est qu'il faut peut-être si prendre autrement pour un champs text.

    Merci de m'éclairer.

    PS : Dans ma requête j'ai mis l'id 158 c'était pour tester car je suis sur que ce produit à bien le mot "dorigine" dans le champs `description_short`sinon j'ai au moins une centaine de produits.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 625
    Billets dans le blog
    10
    Par défaut
    Ce que la requete ne trouve pas, c'est ce que vous avez mis comme critère de filtrage, donc ce qu'il y a dans le where

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 73
    Par défaut
    Donc si je comprends bien c'est id_product = 158 qui ne trouve pas, bizarre cette requête m'affiche bien ma ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM  `ps_product_lang` WHERE  `id_product` = 158
    Je penses que ça doit venir de la "d'orgine" dans la fonction REPLACE. Mais je ne vois pas comment placer l'apostrophe autrement par le code html

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 625
    Billets dans le blog
    10
    Par défaut
    Et j'ajoute, à titre linguistique, que c'est dommage de remplacer "clef" par "clé" car :
    - la première orthographe présente l'avantage de rappeler l'origine étymologique latine - clava - qui nous a laissé clef, clavette, clavecin, clavier, clavicule etc...
    - et, plus en rapport avec les préoccupations quotidiennes des informaticiens, c'est plus facile de rechercher la chaine de caractères "CLEF" dans un S.I. que "CLE" qui récupère des mots parasites tels que "article", "boucle", et plus rarement "monocle", "pinacle" ou encore "cleptomane" (si si, dans le système d'informations de la P.J par exemple )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 73
    Par défaut
    Oui je comprends bien mais ça c'est autre chose, le client a décidé d'utiliser "clé" au lieu de "clef" même si on le conseil au final c'est lui qui décide.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    En fait ça dépend comment est codée l'apostrophe dans ta table, mais a priori il n'y a pas de raison de penser que c'est en HTML.

    En supposant qu'il s'agit d'une vraie apostrophe, tu as deux solutions : soit tu utilises des guillemets comme tu as fait, du coup l'apostrophe peut s'écrire telle quelle (si tu as déjà essayé, ça a peut-être raté parce que tu as oublié un I dans "d'origine").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ps_product_lang SET  description_short = REPLACE(  description_short ,  "dorigine",  "d'origine" ) WHERE  id_product =158
    Autre solution, qui est celle du SQL normalisé, tu échappes l'apostrophe en la doublant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ps_product_lang SET  description_short = REPLACE(  description_short ,  'dorigine',  'd''origine' ) WHERE  id_product =158 
    -- NB : l'apostrophe est représentée par deux apostrophes, pas par un guillemet

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 73
    Par défaut
    Merci Antoun,

    Un copier/coller + une erreur de frappe, je n'ai pas l'oeil pour ça

    Les deux solutions que tu proposes marche bien.

    En fait je voulais échapper l'apostrophe mais l'habitude du php je le faisais avec un anti-slash.
    J'avais oublié qu'en SQL il faut le doubler pour l’échapper.

    Encore merci

  8. #8
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 900
    Par défaut
    Salut lex89.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ps_product_lang SET  `description_short` = REPLACE(  `description_short` ,  "dorigine",  "d'orgine" ) WHERE  `id_product` =158
    A ma connaissance, je voie cinq façons de gérer une apostrophe dans une requête MySql.

    1) doubler l'apostrophe comme l'indique Antoun. Soit la chaîne de caractères suivante :
    2) mettre la chaîne de caractères entre guillemet.
    3) utiliser l'anti-slash pour faire un escape. C'est le plus pratique.
    4) utiliser en php la fonction 'mysqli_real_escape_string()'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req1 = "update ps_product_lang SET description_short=REPLACE(description_short, 'dorigine',  'd''orgine') WHERE id_product=158;";
    $req2 = mysqli_real_escape_string($link, $req1);
    Ici, j'ai doublé l'apostrope dans le mot "d'origine".
    Le fait de passer par la fonction 'mysqli_real_escape_string' va mettre pour tous les caractères spéciaux un anti-slash devant celui-ci.

    5) ne plus passer par "mysqli" pour gérer les accès à votre base de données, mais passer par le PDO.
    En effet, celui-ci va gérer tous les symboles spéciaux automatiquement.

    Le sujet a été maintes fois traités sur le net, alors une petite recherche avec ton amis google, et tu aurais pu trouver la réponse tout seul.

    @+

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 625
    Billets dans le blog
    10
    Par défaut
    Il y a encore une autre méthode : (code hexa à adapter en fonction du jeu de caractères local)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 'D' !! X'7D' !! 'ORIGINE'    
    FROM SYSIBM.SYSDUMMY1   (DB2)
    FROM DUAL (Oracle, MySQL)
    Ou rien du tout (SQL-Server)

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 13/06/2014, 09h45
  2. La fonction replace() ne fonctionne pas
    Par bernidupont dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/03/2013, 18h13
  3. méthode replace ne fonctionne pas
    Par toutounesan dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/07/2011, 23h26
  4. Cufon.replace() ne fonctionne pas sous firefox
    Par Saphir09 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2011, 09h05
  5. [Internet Explorer] window.location.replace ne fonctionne pas
    Par Gat- dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/02/2007, 13h15

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