Bonjour,
J'ai une petite difficulté de recherche dans ma base de données avec les caractères spéciaux.
Les requêtes sur des noms contenant des accents sont vides en PHP alors que la même requête exécutée dans MyAdmin fonctionne.
Bonjour,
J'ai une petite difficulté de recherche dans ma base de données avec les caractères spéciaux.
Les requêtes sur des noms contenant des accents sont vides en PHP alors que la même requête exécutée dans MyAdmin fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $str_Sql = "SELECT cd.IdCd, AnCd, TitreCd, Pseudonyme FROM cd INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE TitreCd = 'Démo' ";
Et en faisant
et le repassant dans votre phpmyadmin ça marche ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo $str_Sql ;
avec la collation utf8/utf8_general_ci Démo et Demo sont équivalents. tu peux convertir la chaîne Démo en binaire:
Il est aussi possible d’effectuer cette comparaison en passant REGEXP:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $str_Sql = "SELECT cd.IdCd, AnCd, TitreCd, Pseudonyme FROM cd INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE binary TitreCd = 'Démo' ";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $str_Sql = "SELECT cd.IdCd, AnCd, TitreCd, Pseudonyme FROM cd INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE TitreCd REGEXP 'Démo' ";
Comme dit mon garagiste, bonjour mes essieux
Oui MaitrePylos quand je fais un echo que je copie colle dans MyAdmin ça marche.
Non armel18 avec binary ça ne marche ni sur ma page ni dans MyAdmin.
Avec REGEXP ça ne marche pas sur ma page mais ça marche sur MyAdmin.
Du coup le souci ne se trouve pas dans la requête, mais dans la façon de faire.
On peux avoir l'ensemble du code ?
En fait je veux bien qu'on regarde le reste du code, mais ça fonctionne très bien pour les requêtes sans caractères spéciaux...
C'est un webservice qui me donne une liste de cd qui portent le même nom ou qui utilisent un des mots du texte passé en paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 <?php include("fct.php"); $request_method = $_SERVER["REQUEST_METHOD"]; switch($request_method) { case 'GET': if(!empty($_GET["str_Alb"])) { $str_Alb = $_GET["str_Alb"]; $str_Sql = "SELECT cd.IdCd, AnCd, TitreCd, Pseudonyme FROM cd INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE TitreCd = '".addslashes($str_Alb)."' "; //sépare tous les mots du nom $tab_Mots = explode(" ", $str_Alb); $response = array(); if (is_array($tab_Mots)){ if(count($tab_Mots) > 1){ $cpt_Mot = 0; while(each($tab_Mots)){ $str_Sql = $str_Sql." OR TitreCd LIKE '%".addslashes($tab_Mots[$cpt_Mot])."%' "; $cpt_Mot ++; } } $str_Sql = $str_Sql." ORDER BY TitreCd "; $result = mysqli_query($conn, $str_Sql)or die ("Erreur ".$str_Sql); while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $response[] = $row; } } //$response = $str_Sql; $Text = "{\"Cd\":".json_encode($response, JSON_PRETTY_PRINT)."}"; header('Content-Type: application/json'); echo $Text; } } ?>
Du coup, on peux voir un echo de? Juste pour voir si cela retourne bien 'Démo', ce dont je doute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $_GET["str_Alb"];
Moi je n'en doute pas puisque l'echo de la requéte donne bien "TitreCd = 'Démo' "
Je l'ai quand même fait et j'ai Démo
Bonjour, on va y arrivé
Du coup je viens de reprendre le code et de généré moi même la ligne SQL que cela génère (au passage on peut re-factoriser votre code, car il utilise des fonctions obsolète ).
Vous me garantissez que ce code SQL suivant , fonctionne dans votre ide de Base de données
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT cd.IdCd, AnCd, TitreCd, Pseudonyme FROM cd INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE TitreCd = 'Démo' OR TitreCd LIKE '%Démo%' ORDER BY TitreCd
C'est ce que je génère avec la variable $str_Alb fixé sur 'Démo'
Oui dans MyAdmin ça me donne la liste des albums dont le nom est "Démo" ou qui ont le mot "Démo" dans le titre.
Je viens même de recopier la requéte que vous avez généré résultat 34 albums dans ma base.
Du coup reste le code et en dehors du each() , je vois pas.
possible d'avoir un jeu de données de la table cd, cdsigne et pseudos ?
Comment je fais pour te donner la table "cd" (pas besoin des autres tables même en simplifiant la requéte sur une seule table ça fait pareil)
Dans PHPMyAdmin; il y a possibilités d'exporter la table. et cela fournit un fichier SQL que tu peux mettre en piece jointe ici.
Bonjour,
Oui ce n'est pas pour l'export de la table que je me pose des questions c'est sur la façon de l'envoyer ici.
Je ne comprend pas comment fonctionne les pièces jointes.
Je fouille un peu et je reviens.
cd.zip
Voici, j'ai adapté le code, il faut donc remettre dans votre contexte.
mais chez moi cela retourne un Json
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 //include("fct.php"); $_GET["str_Alb"] = "Démo"; $request_method = 'GET'; switch ($request_method) { case 'GET': if (!empty($_GET["str_Alb"])) { $str_Alb = $_GET["str_Alb"]; $str_Sql = "SELECT cd.IdCd, AnCd, TitreCd FROM cd -- INNER JOIN cdsigne ON cd.IdCd = cdsigne.IdCd -- INNER JOIN pseudos ON cdsigne.IdPseudo = pseudos.IdPseudo WHERE TitreCd = ?"; //sépare tous les mots du nom $tab_Mots = explode(" ", $str_Alb); foreach ($tab_Mots as $mot) { $str_Sql = $str_Sql . " OR TitreCd LIKE '%$str_Alb%' "; "; } $str_Sql = $str_Sql . " ORDER BY TitreCd "; } $pdo = new PDO('mysql:host=localhost;dbname=lob;charset=utf8', 'root', 'bonjour'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare($str_Sql); $stmt->execute([$str_Alb]); $response = $stmt->fetchAll(PDO::FETCH_ASSOC); $Text = "{\"Cd\":".json_encode($response, JSON_PRETTY_PRINT)."}"; header('Content-Type: application/json'); echo $Text; }
Sortie
Code json : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 {"Cd":[ { "IdCd": "967", "AnCd": "2004", "TitreCd": "D\u00e9mo" }, { "IdCd": "963", "AnCd": "2005", "TitreCd": "D\u00e9mo" }, { "IdCd": "974", "AnCd": "2000", "TitreCd": "D\u00e9mo" }, { "IdCd": "884", "AnCd": "2006", "TitreCd": "D\u00e9mo" }, { "IdCd": "796", "AnCd": "2006", "TitreCd": "D\u00e9mo" }, { "IdCd": "792", "AnCd": "2006", "TitreCd": "D\u00e9mo" }, { "IdCd": "737", "AnCd": "2005", "TitreCd": "D\u00e9mo" }, { "IdCd": "732", "AnCd": "2005", "TitreCd": "D\u00e9mo" }, { "IdCd": "668", "AnCd": "2002", "TitreCd": "D\u00e9mo" }, { "IdCd": "665", "AnCd": "2003", "TitreCd": "D\u00e9mo" }, { "IdCd": "639", "AnCd": "2003", "TitreCd": "D\u00e9mo" }, { "IdCd": "634", "AnCd": "2002", "TitreCd": "D\u00e9mo" }, { "IdCd": "406", "AnCd": "2001", "TitreCd": "D\u00e9mo" }, { "IdCd": "255", "AnCd": "2004", "TitreCd": "D\u00e9mo" }, { "IdCd": "943", "AnCd": "2007", "TitreCd": "Demo 2007" }, { "IdCd": "1", "AnCd": "2002", "TitreCd": "D\u00e9mo ASF" }, { "IdCd": "36", "AnCd": "2004", "TitreCd": "D\u00e9mo Black and Blue" }, { "IdCd": "45", "AnCd": "2003", "TitreCd": "D\u00e9mo Blues Station Trio" }, { "IdCd": "1471", "AnCd": "2001", "TitreCd": "D\u00e9mo Bluesin Machine" }, { "IdCd": "47", "AnCd": "2002", "TitreCd": "D\u00e9mo Bluesy Train" }, { "IdCd": "46", "AnCd": "2000", "TitreCd": "D\u00e9mo Bluetones" }, { "IdCd": "1521", "AnCd": "1994", "TitreCd": "D\u00e9mo Comme Un Lundi" }, { "IdCd": "1334", "AnCd": "2011", "TitreCd": "D\u00e9mo Curtis Johnson Band" }, { "IdCd": "1430", "AnCd": "2012", "TitreCd": "D\u00e9mo Hawaiian Pistoleros" }, { "IdCd": "1380", "AnCd": "2012", "TitreCd": "D\u00e9mo Les Blouzayeurs" }, { "IdCd": "1395", "AnCd": "1997", "TitreCd": "D\u00e9mo Miguel M [and] The Brachay_s Blues Band" }, { "IdCd": "1364", "AnCd": "2012", "TitreCd": "D\u00e9mo Missin_ Train" }, { "IdCd": "1162", "AnCd": "2009", "TitreCd": "D\u00e9mo Peeble" }, { "IdCd": "1394", "AnCd": "2003", "TitreCd": "D\u00e9mo Scratch My Back" }, { "IdCd": "863", "AnCd": "2006", "TitreCd": "I'm Here Baby (D\u00e9mo)" }, { "IdCd": "904", "AnCd": "2007", "TitreCd": "The Eight Track Demo" } ]}
Merci MaitrePylos,
ça fonctionne très bien, il ne me reste plus qu'a comprendre comment fonctionne cette histoire de PDO pour pouvoir réutiliser ça.
oui c'est bien un Json dont j'ai besoin.
Par contre, tu as mis
j'ai corrigé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $str_Sql = $str_Sql . " OR TitreCd LIKE '%$str_Alb%' "; ";
merci encore...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $str_Sql = $str_Sql . " OR TitreCd LIKE '%$mot%' ";
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager