Requete php sql avec accent : pas de correspondance dans la base

Requete php sql avec accent : pas de correspondance dans la base - PHP - Programmation

Marsh Posté le 24-08-2012 à 13:47:37    

Bonjour,
 
J'ai un problème avec une de mes requetes.
 
La voici :  

Citation :

$bdd=new PDO('mysql:host=localhost;dbname=ma_base','root','root');
$bdd->query("SET NAMES UTF8" );
$reserv = $_POST['reservation_notes'];
 $ma_requete2="SELECT * FROM `spip_articles`  WHERE titre='$reserv' OR  descriptif='$reserv' ";
 $envoi2 = $bdd->query($ma_requete2);
 while($resultat2 = $envoi2->fetch())
 {
echo $resultat2['texte'];  
 }


 
En fait le problème est que si $_POST['reservation_notes'] contient un accent, aucun résultat n'est trouvé. En faisant un echo de ma requete et en passant directement par phpmyadmin, la ligne existe et est affichée correctement. Et si $_POST['reservation_notes'] ne contient ni accent ni caractères spéciales echo $resultat2['texte']; affiche bien ce qui est dans la base.
 
Ma base est en utf-8, ma page est en utf-8.
 
J'ai beaucoup cherché sur le net, j'ai essayé pas mal de choses, sans résultat, le echo reste vide.  
 
Merci.

Reply

Marsh Posté le 24-08-2012 à 13:47:37   

Reply

Marsh Posté le 24-08-2012 à 15:50:13    

à tout les coups, t'as mis champs case sensitive ou en binaire au lieu de case insensitive et text. Faut juste changer la collation et/ou le type du champ. (ex : MEDIUMBLOB devient MEDIUMTEXT si t'es sous mysql).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-08-2012 à 07:55:01    

Merci pour ta réponse mais mon problème ne vient pas de ma base vu que si je tape la requête dans phpmyadmin, le bon résultat est retourné.  
 
 

Reply

Marsh Posté le 27-08-2012 à 09:55:24    

Regardes quel est le charset de la connexion à ta BD quand php s'y connecte (dans le fichier de conf de Mysql ou en regardant les variables de conf via phpmyadmin).
 
PS : le OR dans ta requête, c'est pas une bonne solution, c'est ultra lent.
 
Tu peux utiliser MATCH....AGAINST   (si t'as activé le full-text search)
Tu peux utiliser aussi WHERE CONCAT('titre', 'descriptif') LIKE '%$reserv%'


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-08-2012 à 12:48:01    

J'ai bien mis un SET NAMES UTF-8 lors de ma connexion.  
 
Merci pour le conseil pour le OR.
 
Après quelques (beaucoup) de test, je n'ai pas trouvé de solution donc dans mon formulaire je vais passer l'ID plutôt que le titre ou le descriptif.  
 
Merci d'avoir essayé de m'aider ;)

Reply

Marsh Posté le 27-08-2012 à 15:20:18    

Est-ce que ton fichier php est bien enregistré en UTF-8 aussi, et est-ce que le serveur traite bien les données qu'il reçoit par POST en UTF-8 ?


---------------
http://www.poster-kit.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed