SELECT de données avec apostrophes
Résolu
ephelya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
ephelya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
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.
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 !! :-)
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 !! :-)
A voir également:
- Remplacer apostrophe requête sql
- Remplacer disque dur par ssd - Guide
- Remplacer word - Guide
- Remplacer coco - Accueil - Réseaux sociaux
- Quel site pour remplacer coco - Accueil - Réseaux sociaux
- Remplacer carte graphique - Guide
4 réponses
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.
- 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.
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.
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.
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 :
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);
Pour vérifier d'abord, peux-tu faire ta requête avec
au lieu de
et en mettant un % au lieu d'une apostrophe dans :valeur1 ?
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 ?
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 ! :-)
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 ;)
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 ;)
EDIT : Ajout du langage dans les balises de code (pour avoir la coloration syntaxique )
Elle fonctionne parfaitement, mais quand il y a une apostrophe, ça ne trouve pas le résultat. (Notice: Undefined offset: 0 in /web/new/app/Models/Blog.php on line 487Notice: Trying to get property of non-object in /web/new/app/Models/Blog.php on line 487) la ligne 487 correspond à $res[0] -> val
La requête est ok en bdd, j'ai bien mon résultat ,pour autant que je puisse vraiment la tester pcq pr ça je fais un echo $query en remplaçant les :valeur1, :valeur2 par $title, $idcat et donc en ajoutant les apostrophes obligatoires :
- le echo de $query2
- Le print_r($res) (celui que tu as mis en commentaire)
Au cas où, tu peux aussi essayer de faire du addSlaches sur ton title
http://php.net/manual/fr/function.addslashes.php
et le print_r($res) donne Array()
Le addslashes n'a aucun effet, un echo addslashes($title) me donne "Je suis à l’écoute des besoins de mon corps" et j'ai toujours un résultat vide...
(je n'avais jamais vu qu'on pouvait indiquer le langage dans la balise de code, merci ! ;-) )
Sous quelle forme ? tu peux montrer ?
Ta BDD, tes pages et ta connexion PDO sont bien en UTF8 ?
ne sort aucun résultat, par contre la requête me sort bien des résultats, dont "Je suis à l'écoute des besoins de mon corps"
Ma table et la bdd sont en utf8_general_ci, le serveur en utf8mb4_general_ci, le fichier enregistré en utf 8 mais pour la connexion PDO rien n'est précisé pour le charset