IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Fonction de recherche PDO retourne toujours empty [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Fonction de recherche PDO retourne toujours empty
    Bonjour,

    Je réalise une fonction de recherche avec en paramètre la chaîne à chercher dans la base de données. Quel que soit le paramètre d'entrée, le résultat est vide. Si je remplace le paramètre par une valeur, j'obtiens plusieurs lignes de résultats.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function getData($criteria) {
    	global $db;
     
    	$criteriaEqual = "'$criteria'";
    	$criteriaLike = "'%$criteria%'";
    	var_dump($criteriaEqual, $criteriaLike); // "'marc'", "'%marc%'"
     
    	$query = "
    		SELECT id, first_name, last_name, birth_date
    		FROM dat_persons
    		WHERE id=:criteriaEqual OR first_name LIKE :criteriaLike
    	;";
    	var_dump($query);
    	$result = $db->prepare($query);
    	$result->bindParam('criteriaEqual', $criteriaEqual);
    	$result->bindParam('criteriaLike', $criteriaLike);
    	$result->execute();
    	var_dump($result->fetchAll());
    }

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    Les '' ne sont pas nécessaires .
    La requête est bizarre, la colonne id n'est-elle pas un entier ?
    Le bienfait n'est jamais perdu

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'abus d'apostrophes est dangereux pour la santé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $criteriaEqual = $criteria;
    	$criteriaLike = "%$criteria%";
    	var_dump($criteriaEqual, $criteriaLike); // "'marc'", "'%marc%'"
     
    	$query = "
    		SELECT id, first_name, last_name, birth_date
    		FROM dat_persons
    		WHERE first_name =:criteriaEqual OR first_name LIKE :criteriaLike
    	;";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- $criteriaEqual et $criteriaLike ne sont pas définis dans les paramètres de la fonction : function getData( $criteria ) !

    Par conséquent, soit tu les définis : function getData( $criteriaEqual, $criteriaLike),
    soit on suppose que $criteria est un array, contenant $criteria['Equal'] et $criteria['Like'] !


    La façon la plus simple d'écrire la fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function getData( $criteria ) 
    {
    	global $db;
     
    	$query = "
    		SELECT id, first_name, last_name, birth_date
    		FROM dat_persons
    		WHERE id = :criteriaEqual 
    		OR first_name LIKE :criteriaLike
    		;";
    	$result = $db->prepare($query);
    	$result->execute( array( 
    		':criteriaEqual' => $criteria,
    		':criteriaLike' => '%'.$criteria.'%'
    		));
    	return $result->fetchAll();
    }

    Si néanmoins tu es plus à l'aise avec bindParam :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function getData( $criteria ) 
    {
    	global $db;
     
    	$query = "
    		SELECT id, first_name, last_name, birth_date
    		FROM dat_persons
    		WHERE id = :criteriaEqual 
    		OR first_name LIKE :criteriaLike
    		;";
    	$result = $db->prepare($query);
    	$result->bindParam(':criteriaEqual', $criteria);
    	$result->bindParam(':criteriaLike', '%'.$criteria.'%');
    	$result->execute();
    	return $result->fetchAll();
    }
    Dernière modification par Invité ; 12/04/2018 à 22h14.

  5. #5
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,

    > 1- $criteriaEqual et $criteriaLike ne sont pas définis dans les paramètres de la fonction

    Elles sont locales à la fonction.
    Le bienfait n'est jamais perdu

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ah oui !
    Oups... Je me suis laissé distraire par... moi-même.
    Je retire donc la remarque et corrige mon précédent message !

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$result->execute( array( 
    		':criteriaEqual' => $criteria,
    		':criteriaLike' => '%'.$criteria.'%'
    		));

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci à Willy_k. J'avais relevé l'erreur mais compte tenu de l'aide habituellement apportée par jreaux62, je n'ai pas relevé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenOffice][Tableur] Fonction SI retourne toujours FAUX // Fonction CASE ?
    Par Jarael dans le forum OpenOffice & LibreOffice
    Réponses: 5
    Dernier message: 03/08/2017, 20h29
  2. fonction count() me retourne toujours 1
    Par Leclandestin dans le forum Langage
    Réponses: 2
    Dernier message: 26/12/2010, 18h28
  3. ma fonction retourne toujours null
    Par haco28 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 13/08/2009, 11h53
  4. [XSLT]fonction contains retourne toujours false
    Par wildmary dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 01/08/2007, 11h22
  5. fonction retournant toujours 0.000 ?
    Par _SamSoft_ dans le forum C
    Réponses: 49
    Dernier message: 22/02/2007, 20h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo