[PDO] Problèmes avec les requêtes préparées

Problèmes avec les requêtes préparées [PDO] - PHP - Programmation

Marsh Posté le 16-04-2007 à 10:30:59    

Je suis légèrement dubitatif.
 
J'utilise les requêtes préparées de PDO, mais mes résultats diffèrent selon la méthodes. Si j'écris :
 

Code :
  1. $sql = 'SELECT count(*) FROM  ?  WHERE ? = ? ';
  2. $Stmt = $BD->prepare($sql);
  3. $Stmt->execute( array(  'FomascPieces', 'numero', 1 ) );
  4. $row = $Stmt->fetch();

 
 
J'obtiens $row[0] = 0
 
Par contre, Si j'écris :
 

Code :
  1. $sql = 'SELECT count(*)
  2.         FROM  FomascPieces
  3.         WHERE numero = 1';
  4. $Stmt = $BD->prepare($sql);
  5. $Stmt->execute();
  6. $row = $Stmt->fetch();


 
j'ai $row[0] = 1
 
Ça laisse perplexe. Quelqu'un aurait une idée du Problème ????  
 
Note: Avec bindParam, j'ai la même chose, et même problème en utilisant les  paramètres nommés ( :table :exemple :etc ) en lieu et place des points d'interrogations.

Reply

Marsh Posté le 16-04-2007 à 10:30:59   

Reply

Marsh Posté le 16-04-2007 à 12:07:48    

ne pas utiliser de placeholder avec des identifiants (de table/champ), ce qui est logique vu que le plan de la requête ne sera pas le même selon la table/champ, donc dans ce cas la préparation de la requête n'a pas de sens.
 
Voici la requête que va donner ton 1er exemple :

SELECT count(*) FROM  'FomascPieces' WHERE 'numero' = '1'

tu remarqueras les quotes pour le nom de la table et le nom du champ :
- erreur de syntaxe, pas de quote pour le nom d'une table
- 'numero' = '1' n'est jamais vrai (numero est considéré comme une chaîne et non comme le nom d'un champ)

Reply

Marsh Posté le 17-04-2007 à 14:13:41    

Ok pour le paramètres de table c'est bon à savoir.
 
Sinon, pour le reste, ça marche très bien sans rien changer, effectivement on peu rencontrer des soucis avec ce genre de requête un peu laxistes, mais j'utilise pour ma part sqlite, qui ne pose jamais de soucis, puisque les colonnes ne sont pas typées.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed