Problème de requêtes SQL avec accents
Web83
-
Web83 -
Web83 -
Bonsoir à tous,
J'ai actuellement un problème PHP/SQL (désolé, je ne sais pas trop d'où vient l'erreur en fait) concernant l'éxecution d'une requête.
Contexte : Site développé en PHP avec base de données MySQL en faisant des requêtes à l'aide de PDO.
Au niveau de la partie PHP, j'ai le code suivant dans <head> :
Juste après avoir établi la connexion avec ma base de données :
Dans ma base de données, j'ai une table qui contient un champ category de type ENUM qui contient la valeur :
L'interclassement du champ est utf8_bin.
Ce que je veux : Sélectionner tous les champs de cette table dont la catégorie est : 'Testé'
Ma requête :
J'ai 2 entrées dont le champ category est fixé à 'Testé' dans MaTable. En faisant mon while($resultat = $reponse->fetch()){ , je devrais pouvoir retrouver les données concernant ces 2 entrées. Il se trouve que la réponse que j'obtiens est vide.
Bizarrerie : Si je fais un echo de ma query avant de l'éxecuter, et que je copie-colle ce qui est affiché dans une requête MySQL, l'interface MySQL me ressort bien les 2 entrées que je cherche.
Remarque : Si je fixe $category = 'Nul', il me ressort bien toutes les entrées dont le champ category est fixé à 'Nul'.
Je pense qu'il s'agit donc d'un problème d'accent, mais je ne vois pas bien où, car lorsque j'imprime à l'écran ma requête et que je l'exécute dans l'interface MySQL, j'obtiens bien le résultat attendu.
Ce que j'ai déjà testé sans succès :
1) < ?php header('Content-Type: text/html; charset=utf-8'); ?> dans le début de page.
2) utf8_encode() et utf8_decode() sur $category
3) SELECT * FROM 'table'WHERE 'texte' LIKE CONVERT(_utf8 '%cinema%' USING utf8) COLLATE utf8_general_ci ;
En vous remerciant d'avance à tous pour votre aide !
J'ai actuellement un problème PHP/SQL (désolé, je ne sais pas trop d'où vient l'erreur en fait) concernant l'éxecution d'une requête.
Contexte : Site développé en PHP avec base de données MySQL en faisant des requêtes à l'aide de PDO.
Au niveau de la partie PHP, j'ai le code suivant dans <head> :
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Juste après avoir établi la connexion avec ma base de données :
$bdd->query("SET NAMES 'UTF8'");
Dans ma base de données, j'ai une table qui contient un champ category de type ENUM qui contient la valeur :
'Non testé','Testé','Nul'
L'interclassement du champ est utf8_bin.
Ce que je veux : Sélectionner tous les champs de cette table dont la catégorie est : 'Testé'
Ma requête :
$category = 'Testé' $reponse = $bdd->query("SELECT * FROM MaTable WHERE category = '".$category."'");
J'ai 2 entrées dont le champ category est fixé à 'Testé' dans MaTable. En faisant mon while($resultat = $reponse->fetch()){ , je devrais pouvoir retrouver les données concernant ces 2 entrées. Il se trouve que la réponse que j'obtiens est vide.
Bizarrerie : Si je fais un echo de ma query avant de l'éxecuter, et que je copie-colle ce qui est affiché dans une requête MySQL, l'interface MySQL me ressort bien les 2 entrées que je cherche.
Remarque : Si je fixe $category = 'Nul', il me ressort bien toutes les entrées dont le champ category est fixé à 'Nul'.
Je pense qu'il s'agit donc d'un problème d'accent, mais je ne vois pas bien où, car lorsque j'imprime à l'écran ma requête et que je l'exécute dans l'interface MySQL, j'obtiens bien le résultat attendu.
Ce que j'ai déjà testé sans succès :
1) < ?php header('Content-Type: text/html; charset=utf-8'); ?> dans le début de page.
2) utf8_encode() et utf8_decode() sur $category
3) SELECT * FROM 'table'WHERE 'texte' LIKE CONVERT(_utf8 '%cinema%' USING utf8) COLLATE utf8_general_ci ;
En vous remerciant d'avance à tous pour votre aide !
A voir également:
- Problème de requêtes SQL avec accents
- E avec accent minuscule - Guide
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Jointure sql ✓ - Forum MySQL
- Comment faire les accents sur le clavier - Forum Téléphones & tablettes Android