Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1653 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  requete pdo un peu particulière

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

requete pdo un peu particulière

n°2107712
domi_bu
Posté le 23-10-2011 à 16:24:02  profilanswer
 

Bonjour
 
Je sèche sur une requete PDO un peu particulière et j'ai besoin de vos lumières.
 
Je voudrai faire un SELECT contenant un "in"; et en utilisant un tableau qui contient toutes les valeurs du in. Pour ainsi avoir une requete du style :
 
select count(1) as total from personne p where p.id_etablissement = 1 and p.id_role in ('ADMIN','ENS_NON') and nom > 'A'
 
Pour cela je fais :

Code :
  1. $in = "'".implode("','", $tableau_role)."'";
  2.  $requete = $bdd->prepare('select count(1) as total
  3.                from personne p
  4.                where p.id_etablissement = :id_etablissement
  5.                and  p.id_role in :id_role
  6.                and  nom >= :nom_personne');
  7.  $requete->bindValue(':id_etablissement',$id_etablissement, PDO::PARAM_INT);
  8.  $requete->bindValue(':id_role',   "(".$in." )",  PDO::PARAM_STR);
  9.  $requete->bindValue(':nom_personne', $nom_personne,  PDO::PARAM_STR);
  10.  print_r($requete);
  11.  $requete->execute() or die(print_r($requete->errorInfo()));


 
Qaund je débuggue, j'obtiens bien que la variable $in contient ce qu'il faut, par exemple : 'ADMIN','ENS_NON'
 
Et pourtant j'ai toujours une erreur de requete sql :
 
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''(\'ADMIN\',\'ENS_NON\')' and nom >= 'A'' at line 4'
 
Je suis généralement assez habitué à ce genre de requete, mais là je séche.
 
Vos lumière me seront utilises.  
 
Merci  
Dominique

mood
Publicité
Posté le 23-10-2011 à 16:24:02  profilanswer
 

n°2107817
MEI
|DarthPingoo(tm)|
Posté le 24-10-2011 à 12:03:14  profilanswer
 

Le problème c'est qu'il va banaliser les chaines, et va donc banaliser tout les caractères spéciaux (' ici par ex.).
 
Ici le mieux c'est sans doute de faire un truc du genre :

Code :
  1. $first = true;
  2.     $in = "'";
  3.     foreach ($tableau_role as $item) {
  4.         if (!$first) {
  5.             $in .= "', '";
  6.         }
  7.         $in .= $bdd->quote($item);
  8.         $first = false;
  9.     }
  10.      $requete = $bdd->prepare("select count(1) as total
  11.                    from personne p
  12.                    where p.id_etablissement = :id_etablissement
  13.                    and  p.id_role in $in
  14.                    and  nom >= :nom_personne" );
  15.      $requete->bindValue(':id_etablissement',$id_etablissement, PDO::PARAM_INT);
  16.      $requete->bindValue(':nom_personne', $nom_personne,  PDO::PARAM_STR);
  17.      print_r($requete);
  18.      $requete->execute() or die(print_r($requete->errorInfo()));


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  requete pdo un peu particulière

 

Sujets relatifs
Optimiser requête lourde (Copying to tmp table ?)Requete qui fonctionne sous Phpmyadmin mais pas avec php
access requeteproblème pour trouver la bonne requête...
[MySQL] Requête d'update particulière[RESOLU] Requete SQL particulière
besoin d'infos pour requete SQL particuliere !Requête particulière
requete sql facile mais particuliere??[ASP] Afficher le résultat d'une requête particulière...
Plus de sujets relatifs à : requete pdo un peu particulière


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR