SELECT de données avec apostrophes [Résolu/Fermé]

Signaler
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
-
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
-
Bonjour,

J'ai un souci avec une requête pdo que j'utilise pour récupérer une liste d'articles dans ma bdd. Je n'aii aucun souci d'une façon générale mais lorsque le titre comporte une apostrophe, ça plante.
SELECT F_FR_phrase FROM `Bd_92_dlMoQd_phrases` WHERE M_FR_phrase = :valeur1

J'ai essayé un str_replace("'", "''", $title) mais ça ne fonctionne pas davantage, mon apostrophe n'est pas doublée...
Merci d'avance pour votre aide !! :-)



4 réponses

Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608
Bonjour,

- Tu as ton souci à quel moment ? (pour faire la requête ? pour afficher le resultat ? )
- Que te retourne exactement ta requête ? (l'as tu testé en direct dans ta bdd pour voir .?? )
- A quel moment, et avec quel code exactement, as tu essayé ton str_replace ?

Merci de nous apporter toutes ces précisions.

Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020

Ca fonctionne aussi, pourtant quand j'ai testé avec addslashes($title) ça ne fonctionnait pas, qu'est-ce que je peux faire du coup ?
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608 >
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020

petite question toute bête ( après quelques dizaines de tests chez moi... ^^ ) ....
ton fichier PHP ... il est bien encodé en UTF8 SANS BOM ??

=> le souci venant des accents et non des apostrophes en réalité ...
Regarde ici :
https://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8

Ceci fonctionnant parfaitement chez moi (après que je me sois bien mis en UTF8 SANS BOM )
<?php

try{
$bdd =new PDO('mysql:host=localhost; dbname=test; port=3456;charset=utf8', 'root', '');
// Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}


function execQuery($sql,$datas=NULL){
  global $bdd;
   //Execution de la requete
  try{
    $requete = $bdd -> prepare($sql) ;
    $requete->execute($datas) ;
    $res = $requete->fetchAll();
  }catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les datas : " ;
    print_r($datas);
  }

  echo "<pre>";
  print_r($res);
  echo "</pre>";
  $requete = null;

}


$sql = "SELECT *
       FROM Sublym_92_dlMoQd_phrases
       WHERE M_FR_phrase =:M_FR_phrase";
 
 
 $valtest = "Chaque jour de nouvelles opportunités s'offrent à moi";
 $datas = array(':M_FR_phrase'=>$valtest);
 
 execQuery($sql,$datas);


 
  $valTest = "Je sais voir la joie et la beauté en chaque chose";
  $datas = array(':M_FR_phrase'=>$valtest);
 
 execQuery($sql,$datas);
 


?>
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020

Le fichier est bien sans BOM, oui, mais les phrases avec des accents mais sans apostrophe passent sans problème....
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 608 >
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020

dans le code que je t'ai donné ...j'ai testé avec et sans apostrophes ...
les deux fonctionnent.
Tu n'as qu'à tester le script que je t'ai donné pour t'en rendre compte.
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
28935
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 juillet 2020

oui oui, je vais faire le test, je suis en train de terminer un autre script, je te disais ça juste pour info pcq ta remarque concernant les accents m'a surprise :-)
Bonsoir

Attention, il existe plusieurs caractères apostrophe. Il est très possible que le texte enregistré dans la base utilise le U+2019, et que tu fasses ta recherche avec un U+0027

http://www.fileformat.info/info/unicode/char/27/index.htm
http://www.fileformat.info/info/unicode/char/2019/index.htm

Sais-tu vérifier les vrais codes des caractères que tu utilises ?

Si l'un des deux vient d'un copier-coller depuis un traitement de texte ou une page web, le cas est très possible.
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2
non, je n'y connais rien en charset d'une façon générale, ça m'a toujours pas mal rebutée, un peu comme les regex... :-D
mais en effet, à l'origine la requête sql qui m'a permis d'implémenter les centaines de lignes a été générée avec excel...
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
Bonjour,
Je suis en phase avec Le Père.
Dans les phrases que tu colles, on voit bien que ce ne sont pas les mêmes caractères : dans les recherches tu as une apostrophe française (courbée) alors que dans ton dump de base tu as des apostrophes droites (celles qui sont accessibles sur un clavier standard sur la touche 4, qui ne sont pas typographiquement correctes pour écrire en Français).

Du coup, je te suggère de changer cela dans ta variable $titre :
$titre = str_replace('’', "'", $titre);
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020

c'est une bonne idée, je testerai ça, merci ! Pour le moment je suis noyée dans un autre debug plus urgent, mais je regarderai ça de plus près ! :-)

Pour vérifier d'abord, peux-tu faire ta requête avec
WHERE M_FR_phrase LIKE :valeur1

au lieu de
WHERE M_FR_phrase = :valeur1

et en mettant un % au lieu d'une apostrophe dans :valeur1 ?
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2
J'avais déjà fait ce test, mais ça n'avait rien donné...
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2
Bonjour à tous, il y avait plusieurs bugs en parallèle du coup j'ai finalement carrément changé toutes mes requêtes. La question n'est plus d'actualité du coup vu que j'ai contourné le problème, mais je vous remercie quand même pour votre aide ! :-)
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
Tant mieux.
De façon générale, j'aime bien, dans mes scripts d'insertion et de recherche en base de donnée, remplacer systématiquement les apostrophes droites par des apostrophes françaises.
L'avantage principal à mes yeux, c'est d'enlever les apostrophes droites de la base de données, sachant qu'elles ont souvent un sens technique dont il faut se prémunir... On fait d'une pierre deux coups : ça permet de les "échapper", et ça permet d'écrire un meilleur français ;)
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020

C'est une bonne idée, merci, surtout pour moi qui hais les problèmes de charset !! ;-)
Par contre comment tu fais pour choisir l'aporstrophe française ? Je ne vois pas ça sur mon clavier... ^^
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
Euh si tu hais les problèmes de charset il faut peut-être oublier l'idée... L'apostrophe française ne fait pas partie de l'ASCII étendu. Il faut s'assurer d'avoir une bonne cohérence et que tout soit en UTF8...
Sous windows : alt+0146
Sous Linux, sur ma configuration de clavier, altgr+g

Xavier
Messages postés
212
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
17 juin 2020
2 >
Messages postés
3604
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020

En fait je suis sous mac, mais je chercherai, au cas où... :-)
Merci pour l'info en tout cas !