Bonjour.
Dans le cas d'une requête pas très conventionnelle ( https://www.developpez.net/forums/d1...on-n-possible/ ), utilisant UNION et des colonnes fictives, la requête exécutée dans le client mysql fonctionne parfaitement mais pas avec PDO.
Contenant une clause LIMIT, cela évoque immédiatement l'habituel problème nécessitant l'usage préalable de ATTR_EMULATE_PREPARES.
Malgré tout, cela ne fonctionne toujours pas (ne renvoie aucun résultat) et le catch ne renvoie aucune erreur.
Cela ne semble pas être attribué à LIMIT car en supprimant la ligne LIMIT, cela ne renvoie là aussi aucun résultat.
Auriez-vous une idée afin de résoudre mon problème?
Merci.
La requête
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 SELECT 'S' AS TENR, 0 AS P1, TS.item_id AS P2, TS.category_id, TS.item_name AS CONTENU, TS.item_create_time AS HORODATE FROM TABLE2 AS TS WHERE TS.item_name LIKE :a UNION SELECT 'P' AS TENR, TP.produit_id AS P1, TP.categorie_id aS P2, TP.magasin_id, TP.descriptif AS CONTENU, TP.heure_enregistrement AS HORODATE FROM TABLE1 AS TP WHERE TP.descriptif LIKE :a ORDER BY HORODATE DESC LIMIT 0,30
Code php
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
53
54
55
56
57
58
59
60
61
62
63
64
65 <?php $dbh = new PDO('mysql:host=localhost;dbname=test;port=3306','utilisateur','mot_de_passe'); $dbh->exec("SET CHARACTER SET utf8"); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); $requete = " SELECT 'S' AS TENR, 0 AS P1, TS.item_id AS P2, TS.category_id, TS.item_name AS CONTENU, TS.item_create_time AS HORODATE FROM TABLE2 AS TS WHERE TS.item_name LIKE :a UNION SELECT 'P' AS TENR, TP.produit_id AS P1, TP.categorie_id aS P2, TP.magasin_id, TP.descriptif AS CONTENU, TP.heure_enregistrement AS HORODATE FROM TABLE1 AS TP WHERE TP.descriptif LIKE :a ORDER BY HORODATE DESC LIMIT 0,30 "; $parametres = array( 'a' => '%blé%' ); try { $sql = $dbh->prepare($requete); $sql->execute($parametres); } catch (PDOException $e) { echo $e->getCode().' '. $e->getMessage(); } $extraction = $sql->fetchAll(PDO::FETCH_ASSOC); foreach ($extraction as $ligne) { print_r($ligne); } ?>
Résultat d'exécution de la requête dans client mysql
Si j'exécute avec PDO la requête en remplaçant :a par une valeur cela fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 S 0 3 29 Farine de blé 1154322935 P 8 8 19 Biscuits gerblé 1137085482 P 6 6 7 Conserves de blé germé 1136969576 P 2 2 18 Palette de farine de blé 1136966647
En pièce-jointe, fichier sql de test.
Merci.
Partager