[RESOLU] Problème requête préparée pour recherche

Eléphanteau du PHP | 24 Messages

20 nov. 2018, 18:21

Salut,
j'ai crée sur mon site web une page de recherche interne. J'ai utilisé une requête préparée mais ça ne donne pas.
Voici mon code:
<?php
		if(!empty($_GET['q']))
		{
			$stmt=$_GET['q'];
			try
			{
				$bdh = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
			}
			catch(Exception $e)
			{
				die('Erreur : '.$e->getMessage());
			}
			
	52		$stmt = $dbh->prepare("SELECT titre FROM articles WHERE titre LIKE ?");
			if ($stmt->execute(array($_GET['q']))) {
			  while ($row = $stmt->fetch()) {
				print_r($row);
				}
			}
			
		}
		?>
J'ai deux messages d'erreur:
1- Notice: Undefined variable: dbh in C:\wamp\www\monsite.cg\recherches.php on line 52
2- Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\wamp\www\monsite.cg\recherches.php on line 52

J'ai besoin de l'aide de vous tous. J'attends vos réponses.

Avatar du membre
Mammouth du PHP | 1609 Messages

20 nov. 2018, 18:27

Salut, faut apprendre à se relire.
Tu déclares $bdh et ensuite tu essaies d'utiliser $dbh... :mrgreen:
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1564 Messages

20 nov. 2018, 18:42

Salut, faut apprendre à se relire.
Tu déclares $bdh et ensuite tu essaies d'utiliser $dbh... :mrgreen:
Je connais pas bien les requêtes préparée mais il me semble (comme avec mysqli_*) qu'on utilise la variable de connexion pour faire des requêtes, non ?

Je penche plutôt que ton LIKE est mal utilisé, quand on fait une recherche avec LIKE, on entoure ce qu'on veu rechercher avec des guillemet simples:
("SELECT * FROM table WHERE champ LIKE 'ce que je recherche'");//recherche le terme exact
("SELECT * FROM table WHERE champ LIKE '%ce que je recherche'");//recherche tous les champs qui finissent par le terme
("SELECT * FROM table WHERE champ LIKE '%ce que je recherche%'");//recherche le terme n'importe où dans le champ

Avatar du membre
Mammouth du PHP | 1609 Messages

20 nov. 2018, 18:50

Je suis pas allé jusqu'à regarder la requête two3d car il y a déjà un problème avec le nom de la variable, d'où les 2 messages d'erreur. ;)

$dbh est undefined vu qu'elle a été déclarée en $bdh (undefined variable dbh) et du coup forcément $dbh est null et n'a donc pas de méthode prepare (Call to a member function prepare() on null).

Mais ta remarque sur le % peut être pertinente pour la suite. :)
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 24 Messages

20 nov. 2018, 19:00

Merci Saian pour la réponse. J'ai arrangé donc plus d'erreur mais la requête n'affiche rien en retour "la table n'est pas vide"

Avatar du membre
Mammouth du PHP | 1564 Messages

20 nov. 2018, 19:03

en effet, j'avais pas vue ^^ nommez la $pdo! lol ce sera moins trompeur, ou même faire une fonction, du genre:
function requete($sql){
   global $pdo;
   return $pdo->prepare($sql);
}
//utilisation simple et plus rapide que de tout taper à chaque fois:
$stmt=requete("SELECT titre FROM articles WHERE titre LIKE '?'");

Eléphanteau du PHP | 24 Messages

26 nov. 2018, 11:44

Bonjour,
Il y a quel problème avec cette requête car elle n'affiche rien.
$stmt=$_GET['q'];
$stmt = $bdh->prepare("SELECT titre FROM articles WHERE titre LIKE '%?%'");
			if ($stmt->execute(array($_GET['q']))) {
			  while ($row = $stmt->fetch()) {
				print_r($row);
				}
			}

Avatar du membre
Mammouth du PHP | 1564 Messages

26 nov. 2018, 12:01

si elle affiche rien c'est qu'il y a sans doute pas de résultat ou qu'il y a une erreur, il vous faut faire un debug, ligne par ligne et voir qu'est ce que dit votre requête
Je commencerais par afficher le nombre de ligne retournée par la requête en question, puis voir aussi si le mysql error retourne pas d'erreur