Bonjour, j'ai un petit souci de recherche sur ma base de données.
Je propose sur mon site un formulaire de recherche sur des petites annonces. Ce sont des annonces ciblées sur les instruments de musique, donc il y a des champs spécifiques.
Pour cela, j'utilise un script PHP qui récupère les champs postées et qui construit une requete SQL en fonction des champs remplis ou non.
Ca fonctionnait très bien tant que j'utilisais la fonction mysql_query. (voir http://www.accordeons-fratelibenar.fr/occasions.php)
Mais je suis en train de mettre à jour mon site, entre autres en utilisant des requêtes PDO.
J'écris ma requête sous conditions que telle ou telle donnée soit postée ou non en concaténant.
En simplifié, ça donne qqch comme ça :
... ce qui fonctionne très bien.
Dans cette recherche est inclue une recherche sur les codes postaux. Pour cela, je recherche les membres (autre table de la BDD) dont le CP correspond à celui recherché.
J'ai tenté, sans trop y croire de rajouter à ma requête :
Mais là, PDO le prend très mal !!! : (j'affiche avant l'erreur la requete préparée, mais je pense plutôt que c'est dans l'envoi des paramètres que ça chie dans la colle)
Quelqu'un connait-il la syntaxe qui va bien ?
Merci beaucoup
Je propose sur mon site un formulaire de recherche sur des petites annonces. Ce sont des annonces ciblées sur les instruments de musique, donc il y a des champs spécifiques.
Pour cela, j'utilise un script PHP qui récupère les champs postées et qui construit une requete SQL en fonction des champs remplis ou non.
Ca fonctionnait très bien tant que j'utilisais la fonction mysql_query. (voir http://www.accordeons-fratelibenar.fr/occasions.php)
Mais je suis en train de mettre à jour mon site, entre autres en utilisant des requêtes PDO.
J'écris ma requête sous conditions que telle ou telle donnée soit postée ou non en concaténant.
En simplifié, ça donne qqch comme ça :
Bloc de code:
$rech='SELECT * FROM mabase WHERE'
if (isset($_POST['Marque'])) { $marque=$_POST['Marque']; }
else { $marque=''; }
if (isset($_POST['Modele'])) { $marque=$_POST['Modele']; }
else { $modele=''; }
[...]
if ($marque!='') { $rech.=' AND Marque=:marque'; }
if ($modele!='') { $rech.=' AND Modele=:modele'; }
[...]
$rech=preg_replace('#(AND|OR)#','WHERE',$rech,1); //le premier seulement
$rech.=' ORDER BY DATE DESC';
$instrus=$bdd->prepare("$rech");
$instrus->bindParam('marque', $modele, PDO::PARAM_INT); }
$instrus->bindParam('modele', $modele, PDO::PARAM_INT); }
[...]
$instrus->execute();
Dans cette recherche est inclue une recherche sur les codes postaux. Pour cela, je recherche les membres (autre table de la BDD) dont le CP correspond à celui recherché.
J'ai tenté, sans trop y croire de rajouter à ma requête :
Bloc de code:
while ($membre=$membres->fetch())
{
$rech=$rech."OR ID_Membre=:id".$count." ";
$id[$count]=$membre['ID'];
$count++;
}
[...]
for ($i=0; $i<=$count; $i++)
{
$instrus->bindParam('id'.$i, $id[$i], PDO::PARAM_INT);
}
Mais là, PDO le prend très mal !!! : (j'affiche avant l'erreur la requete préparée, mais je pense plutôt que c'est dans l'envoi des paramètres que ça chie dans la colle)
SELECT * FROM mabase WHERE ID_Membre=:id0 OR ID_Membre=:id1 OR ID_Membre=:id2 OR ID_Membre=:id3 ORDER BY Date DESC
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens'
Quelqu'un connait-il la syntaxe qui va bien ?
Merci beaucoup