Bonjour,

Je souhaite remplacer cette requête qui fonctionne:

$req=$bdd->query("SELECT id,titre,menu FROM recette WHERE menu='$menu' AND titre LIKE '%$recherche%' ORDER BY titre ASC")

par une requête préparée:

$req=$bdd->prepare("SELECT id,titre,menu FROM recette WHERE menu=:menu AND titre LIKE %:recherche% ORDER BY titre ASC");
$req->bindParam(':menu',$menu);
$req->bindParam(':recherche',%$recherche%);
$req->execute();

mais de toute évidence il y a une erreur, je n'ai aucun retour!
Merci de m'orienter
Modifié par phil6172 (05 Feb 2017 - 12:47)
Administrateur
Suggestion

 AND titre LIKE :recherche 


$req->bindParam(':recherche','%'.$recherche.'%');
Désolé il y avait une erreur dans mon post
voici le bon
$req=$bdd->prepare("SELECT id,titre,menu FROM recette WHERE menu=:menu AND titre LIKE :recherche ORDER BY titre ASC");
$req->bindParam(':menu',$menu);
$req->bindParam(':recherche',%$recherche%);
$req->execute();
par contre j'ai tenté
$req=$bdd->prepare("SELECT id,titre,menu FROM recette WHERE menu=:menu AND titre LIKE :recherche ORDER BY titre ASC");
$req->bindParam(':menu',$menu);
$req->bindParam(':recherche','%'.$recherche.'%');
$req->execute();

voici le message d'erreur

Fatal error: Cannot pass parameter 2 by reference in C:\wamp64\www\MesRecettes\index.php on line
Modifié par phil6172 (05 Feb 2017 - 14:17)
salut,
ça serait tellement plus agréable à lire avec les balises codes appropriées.

Je ne sais pas si c'est une erreur de copie mais tu as oublié d'entourer le caractère %.

Je pense que l'erreur est dû au fait que tu ne peux pas utiliser ce genre d'écriture en PDO.

$req->bindParam(':recherche','%'.$recherche.'%');

Il faut changer ta variable et la passer directement :

$recherche = '%'.$recherche.'%';
$req->bindParam(':recherche', $recherche);
Bonjour.

Personnellement, j'utilise bindValue.

Pas sûre que le problème vienne de là mais j'ai l'impression que cela crée moins de soucis...

Je rajoute aussi le type de donnée comme argument : PDO::PARAM_INT ou PDO::PARAM_STR