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 :

probleme CONCAT SQL PDO [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut probleme CONCAT SQL PDO
    Bonjour, j'ai un problème avec une requete au niveau de la concaténation : ma requête permet de chercher dans la bdd a partir d'une barre de recherche des articles selon leur id_art et leur num_serie.
    Cependant la recherche fonctionne pour trouver les articles selon l'un ou l'autre mais pas avec les deux en même temps et séparés par un "-"
    Par exemple : pour trouver l'article 66666-01 ; je tape sois 66666 soit 01 mais je veux pouvoir taper 66666-01.
    PS: aucune erreur ne s'affiche mais aucun résultat n'est trouvé

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public static function findAllByIdArt($id){
     
            $id='%'.$id.'%';
            $c=base::getConnection();
            $query=$c->prepare("select * from outillage where (id_art like :num_serie) or (num_serie like :num_serie) or (CONCAT(id_art,'-',num_serie) LIKE CONCAT(:id_art,'-',:num_serie))");
            $query->bindParam(':num_serie',$id,PDO::PARAM_INT);
            $query->bindParam(':id_art',$id,PDO::PARAM_INT);
            $dbres=$query->execute();
            $d=$query->fetchAll();
            $tab=array();
            foreach ($d as $key => $value) {
                $a=new Outillage();
                $a->id=$value['id'];
    			$a->num_serie=$value['num_serie'];
                $a->id_art=$value['id_art'];
                $a->article=$value['article'];
                $a->id_doc=$value['id_doc'];
                $a->document=$value['document'];
                $a->ilot=$value['ilot'];
                $a->emplacement=$value['emplacement'];
                $a->liste_tubes=$value['liste_tubes'];
                $a->image=$value['image'];
                $a->image2=$value['image2'];
                $a->image3=$value['image3'];
                $a->image4=$value['image4'];
                $a->image5=$value['image5'];
                $a->nb_utilisation=$value['nb_utilisation'];
                $a->conforme=$value['conforme'];
                $a->dateNonConfo=$value['dateNonConfo'];
                $tab[]=$a;
            }
            return $tab;
        }

  2. #2
    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
    Par défaut
    Tes paramètres doivent avoir des noms différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static function findAllByIdArt($search){
     
    $c=base::getConnection();
     
    $query=$c->prepare("SELECT * FROM outillage WHERE id_art = :id_art OR  num_serie = :num_serie OR CONCAT(id_art,'-',num_serie) = :combinaison");
    $query->execute(array(
    ':id_art'=> $search,
    ':num_serie'=> $search,
    ':combinaison'=> $search));
    Il me semble plus raisonnable de faire des recherches exactes plutôt que des LIKE car si tu cherches l'id "5", tu vas trouver tous les numéro de série avec 5 dedans.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    salut , je test ça et je reviens vers toi

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Par défaut
    Je pense que ton problème viens de la manière de faire les liens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query->bindParam(':id_art',$id,PDO::PARAM_INT);
    PDO:ARAM_INT concerne les entiers hors ta valeur n'est plus un entier puisque tu l'as concaténé avec des %
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query->bindParam(':id_art',$id,PDO::PARAM_STR);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query->bindParam(':id_art',$id);

  5. #5
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    salut albedo merci de ta reponse mais , le probleme ne peut pas venir de la car ma requete fonctionne pour les recherche de num serie ou d'id_art .
    Pour ce qui est de ta solution sabotage j'ai essayé mais mon pc plante lors de l'execution de la requete
    vos autres idées seront les bien venues

  6. #6
    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
    Par défaut
    Hein ? Ton pc plante ? Il redemarre ? Tu as un écran bleu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    Je veux dire que la page plante puis firefox ne repond plus

  8. #8
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    Salut je reup le sujet car j'ai modifier mon code en pensant que cela changerai le resultat : j'ai créé une table avec la value - par default la syntaxe me semble toujours bonne . j'ai appliqué ce que vous m'avez conseillé malheuresement sans résultat j'atteds vos idées

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
        public static function findAllByIdArt($id){
     
            $id='%'.$id.'%';
            $c=base::getConnection();
            $query=$c->prepare("select * from outillage where (id_art like :num_serie) or (num_serie like :num_serie) or (CONCAT(id_art,'test',num_serie) LIKE CONCAT(:id_art,:test,:num_serie))");
            $query->bindParam(':num_serie',$id,PDO::PARAM_STR);
            $query->bindParam(':id_art',$id,PDO::PARAM_STR);
            $query->bindParam(':test',$id,PDO::PARAM_STR);
            $dbres=$query->execute();
            $d=$query->fetchAll();
            $tab=array();
            foreach ($d as $key => $value) {
                $a=new Outillage();
                $a->id=$value['id'];
    			$a->num_serie=$value['num_serie'];
                $a->id_art=$value['id_art'];
                $a->article=$value['article'];
                $a->id_doc=$value['id_doc'];
                $a->document=$value['document'];
                $a->ilot=$value['ilot'];
                $a->emplacement=$value['emplacement'];
                $a->liste_tubes=$value['liste_tubes'];
                $a->image=$value['image'];
                $a->image2=$value['image2'];
                $a->image3=$value['image3'];
                $a->image4=$value['image4'];
                $a->image5=$value['image5'];
                $a->nb_utilisation=$value['nb_utilisation'];
                $a->conforme=$value['conforme'];
                $a->dateNonConfo=$value['dateNonConfo'];
                $a->test=$value['test'];
                $tab[]=$a;
            }
            return $tab;
        }

  9. #9
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    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 : 541
    Par défaut
    Salut, tout comme Sabotage pourquoi ne pas faire de recherche exacte (= au lieu de LIKE) surtout pour le id_art et le CONCAT ?
    Sinon pour ton soucis, essaie ça

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static function findAllByIdArt($search) {
        $search='%'.$search.'%';
        $c=base::getConnection();
        $query=$c->prepare("SELECT * FROM outillage WHERE (id_art LIKE :search) OR (num_serie LIKE :search) OR (CONCAT(id_art,'-',num_serie) LIKE :search)");
        $query->bindParam('search',$search); //PDO::PARAM_STR est utilisé par défaut
        $query->execute();
        $d=$query->fetchAll();
        //Le reste de ton code ici
    }

  10. #10
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    je test, je te tiens au jus si cela fonctionne ou pas

  11. #11
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    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 : 541
    Par défaut
    Petite coquille remplacer $id = '%'.$id.'%'; par $search = '%'.$search.'%'; . J'ai mis le code à jour

  12. #12
    Membre habitué
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut
    Merci willy ça marche!!!!

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

Discussions similaires

  1. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  2. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  3. problemes exercices sql
    Par siciliano_messinese dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/09/2005, 16h52
  4. [JDBC]Probleme curseur SQL
    Par Welldone dans le forum JDBC
    Réponses: 13
    Dernier message: 11/07/2005, 16h57
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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