Bonjour,
J'ai préparé un formulaire de recherche interrogeant une base qui recense des interviews : une table interviews, une table interviewés et une table d'association.
Pour le moment j'ai seulement une requête de type LIKE qui interroge un champ de texte de la table interviews, mais je dois ajouter des critères de recherche.
Ceux-ci prendront la forme de cases à cocher dans le formulaire, ce qui engendre une succession de conditions WHERE que je veux concaténer si le critère est présent dans $_POST.
(j'espère que cette présentation est claire...)
J'ai donc voulu préparer ma requête en écrivant "WHERE ?" et en l'exécutant avec dans l'array une variable $criteres qui contient la concaténation desdits critères issus de $_POST.
Pour le moment, je n'ai mis en place que le critère LIKE... mais ça ne fonctionne déjà pas !
Je pense que ma syntaxe est mauvaise, sans doute dans la variable $critere peut-être ?

voici mon code :
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
<?php
if(isset($_POST) && $_POST['motscles'] != NULL)
	{
 
		// connexion bdd
		try
		{
			$bdd = new PDO('mysql:host=localhost;dbname=base;charset=utf8', 'root', '');
			$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}
		catch(Exception $e)
		{
		        die('Erreur : '.$e->getMessage());
 
 
		}
 
		// on prépare la requête mySQL
		$reponse = $bdd->prepare("SELECT GROUP_CONCAT( CONCAT(t.civilite, ' ', t.prenom, ' ', t.nom, ', ', t.qualite) ORDER BY t.nom SEPARATOR ' ~~ ') AS groupe, i.id, i.nom_fichier
					FROM temoins as t
					INNER JOIN asso_temoins ON t.id = temoin_id
					INNER JOIN temoignages as i ON i.id = temoignage_id
					WHERE ?
					GROUP BY i.id
					ORDER BY i.nom_fichier");
 
 
		// on construit le WHERE de la requête en concaténant les critères de recherche présent dans $_POST
 
		if(isset($_POST['motscles']) && $_POST['motscles'] != NULL)
			$chaine = htmlspecialchars($_POST['motscles']);
			$criteres = "i.retranscription LIKE '%$chaine%'";
 
 
 
		// on exécute le requête et on affiche les résultats
 
		$reponse->execute(array($criteres));
 
		if ($reponse->rowCount() == 0) {
		   echo 'Aucun résultat<br /><a href="recherche.php">Retour au formulaire de recherche</a>';
		}
		else{
 
				?>
 
				<p>
					<?php
					if ($reponse->rowCount() == 1)
					{echo '1 résultat :';}
					else {echo $reponse->rowCount(). ' résultats :';}
					?>
				</p>
 
				<?php
 
				while ($donnees = $reponse->fetch())
				{
					?>
					    <p>
					    	<a href="temoignage.php?id=<?php echo $donnees['id']?>">
					    		Témoignage de&nbsp;
					    		<?php echo $donnees['groupe'];?>
					    	</a>
					    </p>
					<?php
				}
			}
 
			$reponse->closeCursor(); // Termine le traitement de la requête
 
		}
 
else
	{echo '
	Veuillez taper un mot-clé ou sélectionner au moins un critère de recherche avancée<br />
	<a href="recherche.php">Retour au formulaire de recherche</a>
	' ;}
 
?>
Le résultat obtenu est mon " echo 'Aucun résultat ", autrement dit il n'arrive pas à prendre en compte la chaîne de caractères à rechercher

Je précise que la requête fonctionne lorsqu'elle n'est pas préparée, c'est-à-dire avec ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$reponse = $bdd->query("SELECT GROUP_CONCAT( CONCAT(t.civilite, ' ', t.prenom, ' ', t.nom, ', ', t.qualite) ORDER BY t.nom SEPARATOR ' ~~ ') AS groupe, i.id, i.nom_fichier
								FROM temoins as t
								INNER JOIN asso_temoins ON t.id = temoin_id
								INNER JOIN temoignages as i ON i.id = temoignage_id
								WHERE i.retranscription LIKE '%$chaine%'
								GROUP BY i.id
								ORDER BY i.nom_fichier");
Merci beaucoup d'avance pour votre aide !