WRInaute discret
Bonjour,
j'ai besoin d'un peu d'aide SVP, car j'essaye de faire une requete préparée avec LIKE, et je ni arrive pas.
Voici mon code qui marche (sans que la requete soit préparée avec LIKE):
Et voici le code (en requete préparée) que je n'arrive pas à faire marcher :
ps: PDO me renvoi cette erreur:
"Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in ... 139"
La ligne 139 est la où il y a le execute()
Pourquoi ma requête préparée ne marche pas? quelle est la solution SVP ?
Merci beaucoup
j'ai besoin d'un peu d'aide SVP, car j'essaye de faire une requete préparée avec LIKE, et je ni arrive pas.
Voici mon code qui marche (sans que la requete soit préparée avec LIKE):
Code:
<?php
public function selectListeArticlesSearchSite($mots, $orderBy, $limit) {
$sql = "SELECT titre_h1, contenu, title, url, date_action, date_publ, image_url
FROM ".$this->_tableArticles." ";
$i = 0;
foreach($mots as $mot) {
if(strlen($mot) > 0) {
if($i == 0) {
$sql .= " WHERE ";
}
else {
$sql .= " AND ";
}
$sql .= " titre_h1 LIKE '%".$mot."%' OR contenu LIKE '%".$mot."%' ";
$i++;
}
}
$sql .= " AND statut = 1 ";
$sql .= " ORDER BY ".$orderBy." ";
if($limit != NULL) {
$sql .= " LIMIT ".$limit." ";
}
$requete = $this->db()->prepare($sql);
$requete->execute();
$result = $requete->fetchAll(PDO::FETCH_OBJ);
$requete->closeCursor();
return $result;
}
Et voici le code (en requete préparée) que je n'arrive pas à faire marcher :
Code:
<?php
public function selectListeArticlesSearchSite($mots, $orderBy, $limit) {
$sql = "SELECT titre_h1, contenu, title, url, date_action, date_publ, image_url
FROM ".$this->_tableArticles." ";
$i = 0;
foreach($mots as $mot) {
if(strlen($mot) > 0) {
if($i == 0) {
$sql .= " WHERE ";
}
else {
$sql .= " AND ";
}
$sql .= " titre_h1 LIKE ? OR contenu LIKE ? ";
$i++;
}
}
$sql .= " AND statut = 1 ";
$sql .= " ORDER BY ".$orderBy." ";
if($limit != NULL) {
$sql .= " LIMIT ".$limit." ";
}
$requete = $this->db()->prepare($sql);
$i = 1;
foreach($mots as $mot) {
$requete->bindValue($i, '%'.$mot.'%', PDO::PARAM_STR);
$i++;
}
$requete->execute();
$result = $requete->fetchAll(PDO::FETCH_OBJ);
$requete->closeCursor();
return $result;
}
"Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in ... 139"
La ligne 139 est la où il y a le execute()
Pourquoi ma requête préparée ne marche pas? quelle est la solution SVP ?
Merci beaucoup