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 :

[SQL] LIKE dans un sprintf ...


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 19
    Par défaut [SQL] LIKE dans un sprintf ...
    Salut,

    J'ai un petit problème avec ma requête sql de recherche.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      $query_rsListeArticle = sprintf("SELECT ss.themes, art.* FROM art, ss WHERE ss.id =art.rubriqueID AND titre LIKE %s ORDER BY titre ASC",
                           GetSQLValueString($HTTP_GET_VARS['pdt'], "text"));
    lorsque je met dans mon champ de recherche le titre en entier cela recherche les infos corespondant. (ex : Tintin)
    mais je voudrait en plus de cela, faire une recherche sur 1 caractère

    par exemple : je veux rechercher tous les champs titre qui contient un 't'
    t% (en sql on peut faire comme cela ... LIKE c% ...)
    mais lorsque t est contenue dans une variable comment peut on faire ?

    car j'ai déjà essayé de plusieurs façon mais je n'y arrive pas

    du style ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      $query_rsListeArticle = sprintf("SELECT ss.themes, art.* FROM art, ss WHERE ss.id =art.ID AND titre LIKE %s OR titre LIKE %s% ORDER BY titre ASC",
                           GetSQLValueString($HTTP_GET_VARS['pdt'], "text"),GetSQLValueString($HTTP_GET_VARS['pdt'], "text"));
    ou en créeant un variable en lui ajoutant le contenu de pdt et en lui rajoutant % ...

    ceci ne fonctionne pas je ne vois plus comment faire

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 19
    Par défaut
    j'avais déjà essayé mais il me met ceci

    Erreur de syntaxe près de 'ORDER BY titre ASC LIMIT 0, 25' à la ligne 1
    je vais donner la requête en entier :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    $maxRows_rsListeArticle = 25;
    $pageNum_rsListeArticle = 0;
     
    if (isset($_GET['pageNum_rsListeArticle'])) {
      $pageNum_rsListeArticle = $_GET['pageNum_rsListeArticle'];
    }
    $startRow_rsListeArticle = $pageNum_rsListeArticle * $maxRows_rsListeArticle;
     
    mysql_select_db($Connexion, $mix);
     
    // Si recherche
    if ((isset($HTTP_GET_VARS['ref'])) && ($HTTP_GET_VARS['ref'] != "") && (isset($HTTP_GET_VARS['ref']))) {
     
      $query_rsListeArticle = sprintf("SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.ID AND reference LIKE %s ORDER BY titre ASC",
                           GetSQLValueString($HTTP_GET_VARS['ref'], "text"));
     
    }
     
    else //sinon
     
    if ((isset($HTTP_GET_VARS['pdt'])) && ($HTTP_GET_VARS['pdt'] != "") && (isset($HTTP_GET_VARS['pdt']))) {
     
      $query_rsListeArticle = sprintf("SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.rubriqueID AND titre LIKE %s OR titre LIKE %s%% ORDER BY titre ASC",
                           GetSQLValueString($HTTP_GET_VARS['pdt'], "text"),  GetSQLValueString($HTTP_GET_VARS['pdt'], "text"));
     
    }
    else
    {
    $query_rsListeArticle = "SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.ID ORDER BY titre ASC";
    }
    $query_limit_rsListeArticle = sprintf("%s LIMIT %d, %d", $query_rsListeArticle, $startRow_rsListeArticle, $maxRows_rsListeArticle);
    $rsListeArticle = mysql_query($query_limit_rsListeArticle, $mix) or die(mysql_error());
    $row_rsListeArticle = mysql_fetch_assoc($rsListeArticle);
     
    if (isset($_GET['totalRows_rsListeArticle'])) {
      $totalRows_rsListeArticle = $_GET['totalRows_rsListeArticle'];
    } else {
      $all_rsListeArticle = mysql_query($query_rsListeArticle);
      $totalRows_rsListeArticle = mysql_num_rows($all_rsListeArticle);
    }
    $totalPages_rsListeArticle = ceil($totalRows_rsListeArticle/$maxRows_rsListeArticle)-1;
     
    $queryString_rsListeArticle = "";
    if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
      $params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
      $newParams = array();
      foreach ($params as $param) {
        if (stristr($param, "pageNum_rsListeArticle") == false && 
            stristr($param, "totalRows_rsListeArticle") == false) {
          array_push($newParams, $param);
        }
      }
      if (count($newParams) != 0) {
        $queryString_rsListeArticle = "&" . implode("&", $newParams);
      }
    }
    $queryString_rsListeArticle = sprintf("&totalRows_rsListeArticle=%d%s", $totalRows_rsListeArticle, $queryString_rsListeArticle);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 19
    Par défaut
    en résumé car peut être long :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ....
     
    if ((isset($HTTP_GET_VARS['pdt'])) && ($HTTP_GET_VARS['pdt'] != "") && (isset($HTTP_GET_VARS['pdt']))) { 
     
      $query_rsListeArticle = sprintf("SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.rubriqueID AND titre LIKE %s OR titre LIKE %s%% ORDER BY titre ASC", 
                           GetSQLValueString($HTTP_GET_VARS['pdt'], "text"),  GetSQLValueString($HTTP_GET_VARS['pdt'], "text"));
     
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ....
     
    $query_limit_rsListeArticle = sprintf("%s LIMIT %d, %d", $query_rsListeArticle, $startRow_rsListeArticle, $maxRows_rsListeArticle); 
    $rsListeArticle = mysql_query($query_limit_rsListeArticle, $mix) or die(mysql_error()); 
    $row_rsListeArticle = mysql_fetch_assoc($rsListeArticle); 
     
     
    ....
    La faute se situe quelque part là dedans mais je n'arrive pas à savoir quoi !

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    déjà des quotes seraient les bienvenues
    Sinon quand tu as une erreur de syntaxe dans une requetes, le mieux c'est d'imprimer à l'écran cette requete, l'erreur saute aux yeux en général

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 19
    Par défaut
    voilà ce qu'il m'affiche pour ma requête :

    SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.ID AND titre LIKE 'x' OR titre LIKE ''x'%' ORDER BY titre ASC
    l'erreur est ici : ''x'%' mais je ne vois pas comment juste mettre 'x%'

    et si je met pas les ' à '%s%%' cela me donne :

    SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.ID AND titre LIKE 'x' OR titre LIKE 'x'% ORDER BY titre ASC

  7. #7
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu peux mettre en cause cette fonction :
    Elle te rajoute des quotes automatiquement...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 19
    Par défaut
    et bien je venais de trouver lol !
    en effet cette fonction rajoute des ' ! de plus j'ai oublié de mettre dans ma requête : ss.id =art.rubriqueID AND ...

    je met le code on sait jamais que ça pourrait aider quelqu'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $query_rsListeArticle = sprintf("SELECT ss.sthemes, art.* FROM art, ss WHERE ss.id =art.rubriqueID AND titre LIKE %s OR ss.id =art.ID AND titre LIKE '%s%%' ORDER BY titre ASC", 
                           GetSQLValueString($HTTP_GET_VARS['pdt'], "text"),  $HTTP_GET_VARS['pdt']);

    Merci beaucoup pour ton aides !

  9. #9
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    euh... fais gaffe, si ta fonction rajoutait des ', ce n'était probablement pas pour rien... je te conseille de voir si tu l'utilise pas ailleurs, dans le cas contraire tu risque d'avoir des surprises !

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

Discussions similaires

  1. Risque d'injection SQL avec un like dans une procédure stockée
    Par Oberown dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2012, 21h56
  2. Optimisation du LIKE dans une Requete SQL
    Par maxwel56 dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/02/2012, 22h36
  3. Requete sql like dans vb6
    Par dominux80 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 24/06/2008, 11h22
  4. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  5. Retirer "like" dans un SQL
    Par Z[ee]k dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/07/2006, 14h04

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