Requete préparée avec LIKE

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par stephweb13, 31 Juillet 2015.

  1. stephweb13
    stephweb13 WRInaute discret
    Inscrit:
    11 Janvier 2012
    Messages:
    67
    J'aime reçus:
    0
    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):
    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;
    }
    
    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
     
  2. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    788
    J'aime reçus:
    0
    $sql .= " titre_h1 LIKE ? OR contenu LIKE ? ";
    2 ? à chaque passage du foreach
    $requete->bindValue($i, '%'.$mot.'%', PDO::pARAM_STR);
    1 seul bind à chaque passage du foreach
     
  3. stephweb13
    stephweb13 WRInaute discret
    Inscrit:
    11 Janvier 2012
    Messages:
    67
    J'aime reçus:
    0
    Oui exact.

    Du coup j'ai mit ceci pour les bindValue:
    Code:
            $i = 1;
            $x = 2;
            foreach($mots as $mot) {
                $requete->bindValue($i, '%'.$mot.'%', PDO::PARAM_STR);
                $requete->bindValue($x, '%'.$mot.'%', PDO::PARAM_STR);
                $i = $i +2;
                $x = $x +2;
            }
    
    Et visiblement, ça marche.
    Merci beaucoup
     
Chargement...
Similar Threads - Requete préparée Forum Date
marqueurs nommés vs marqueurs interrogatifs requête préparée Développement d'un site Web ou d'une appli mobile 16 Janvier 2019
Marqueur nommé ou interrogatif pour les requetes préparées ? Développement d'un site Web ou d'une appli mobile 30 Décembre 2018
Requête préparée nécessaire ? Développement d'un site Web ou d'une appli mobile 28 Octobre 2018
Combiner 2 requetes préparées Développement d'un site Web ou d'une appli mobile 30 Septembre 2018
Pourquoi ma requête préparée n'update-t'elle rien du tout ? Développement d'un site Web ou d'une appli mobile 8 Avril 2017
Qu'est-ce qui ne va pas dans ma requête préparée ? Développement d'un site Web ou d'une appli mobile 31 Mars 2017
Ma première requête préparée (ne) fonctionne (pas) Développement d'un site Web ou d'une appli mobile 19 Septembre 2015
Erreur dans ma requête DMCA Droit du web (juridique, fiscalité...) 18 Novembre 2021
Réunir 2 requetes sql (ORDER BY ASC et DESC) Développement d'un site Web ou d'une appli mobile 29 Août 2021
Problème de ranking sur une requête cible Demandes d'avis et de conseils sur vos sites 24 Août 2021
Page d’accueil + sous page sur la même requête Problèmes de référencement spécifiques à vos sites 14 Juillet 2021
Search Console Absence de requêtes dans la search console Problèmes de référencement spécifiques à vos sites 21 Mai 2021
Nettoyage de requètes externes de Google, comment faire? Administration d'un site Web 24 Octobre 2020
encodage texte sur requete mysql Demandes d'avis et de conseils sur vos sites 21 Octobre 2020
Requête MySql imbriquée Développement d'un site Web ou d'une appli mobile 8 Octobre 2020
Comment se placer sur des requêtes inhabituelles dû au confinement Rédaction web et référencement 25 Mars 2020
Requête Ajax avec code source visible Développement d'un site Web ou d'une appli mobile 14 Mars 2020
Déclassement sur requêtes et pays spécifiques? Crawl et indexation Google, sitemaps 11 Janvier 2020
Résultats étranges pour la requête site: Problèmes de référencement spécifiques à vos sites 26 Août 2019
Qwant 20 milliards de requetes en 2018? 2 x plus que Google? Autres moteurs de recherche connus 2 Avril 2019