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 :

[PDO] Requête avec LIKE [SQL-Server]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut [PDO] Requête avec LIKE
    Bonjour,

    PHP 7.3.10
    Extension pdo sqlserveur

    J'ai besoin de faire une requête préparée avec LIKE.
    bindParam, bindValue, directement dans execute : j'ai essayé différentes solutions trouvées sur le net, mais aucune ne fonctionne.
    [EDIT] : j'ai finalement trouvé une solution, voir en fin de ce message.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE '%:mot%' OR c2 LIKE  '%:mot%';";
     
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 20);
    $stmt->execute();
    Erreur
    Tried to bind parameter number 65536. SQL Server supports a maximum of 2100 parameters.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE CONCAT('%', :mot, '%') OR c2 LIKE CONCAT('%', :mot, '%');";
     
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 20);
    $stmt->execute();
    Erreur
    [Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot OR c2 LIKE :mot;";
     
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':mot', '%'.$expression.'%', PDO::PARAM_STR, 22);
    $stmt->execute();
    Erreur
    Fatal error: Uncaught Error: Cannot pass parameter 2 by reference

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot OR c2 LIKE :mot;";
     
    $stmt = $dbh->prepare($query);
    $expression = '%'.$expression.'%';
    $stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 22);
    $stmt->execute();
    Erreur
    [Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot OR c2 LIKE :mot;";
     
    $stmt = $dbh->prepare($query);
    $stmt->execute(array(':mot' => '%'.$arametre[4] . '%'));
    Erreur
    [Microsoft][ODBC Driver 17 for SQL Server]Champ COUNT incorrect ou erreur de syntaxe



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot1 OR c2 LIKE :mot2;";
     
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':mot1', $expression, PDO::PARAM_STR, 20);
    $stmt->bindParam(':mot2', $expression, PDO::PARAM_STR, 20);
    $stmt->execute();
    Erreur
    Warning: Uncaught PDOException: SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Syntaxe incorrecte vers 'OUTPUT'



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot1 OR c2 LIKE :mot2;";
     
    $stmt = $dbh->prepare($query);
    $stmt->bindValue(':mot1', '%'.$expression.'%', PDO::PARAM_STR, 20);
    $stmt->bindValue(':mot2', '%'.$expression.'%', PDO::PARAM_STR, 20);
    $stmt->execute();
    Erreur
    Il n'y a pas d'erreur et ça fonctionne.
    Avec SQLServer, il faut donc autant de binValue que de paramètre dans la requête.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    Salut,

    Je pense que ce n'est pas normal d'ajouter un bindValue() pour chaque alias, si on prend l'erreur du troisième cas
    Fatal error: Uncaught Error: Cannot pass parameter 2 by reference
    , que donne ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT c1, c2
    FROM table
    WHERE c1 LIKE :mot OR c2 LIKE :mot;";
    $expression="%".$expression."%";
    $stmt = $dbh->prepare($query);
    $stmt->bindParam(':mot', $expression, PDO::PARAM_STR, 22);
    $stmt->execute();

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

Discussions similaires

  1. Optimiser ma requète avec like
    Par vb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/11/2008, 15h45
  2. requête avec LIKE et IN ensemble
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2008, 11h02
  3. Pb Requête avec Like
    Par Syrrus dans le forum VBA Access
    Réponses: 7
    Dernier message: 21/11/2007, 17h34
  4. [Débutant] Requête avec Like
    Par nellynew dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2006, 07h30
  5. Requête avec like et un champ de formulaire
    Par Sly2k dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 31/07/2006, 15h46

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