Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 14h37   #1
Membre à l'essai
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 88
Points : 22
Points : 22
Par défaut Pdo : bind update avec :var et ? ( ordre d'exécution)

Bonjour !

si je fais le code suivant :

Code :
1
2
3
4
5
6
7
 
$sql = "select :cols FROM :table where Db = ?";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':table','dblist');
$stmt->bindValue(':cols','*');
$stmt->bindValue(1,'test');
$stmt->execute();
que doit je mettre pour la valeur du ? , la valeur 1 ou la valeur 3 ? Ou bien ne peut t'on pas faire ce genre d'écriture?

Merci bien
Valkirion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h44   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
déjà ce que tu veux faire n'est pas possible, tu peux pas mettre en paramètre une table dans une requete préparée
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h25   #3
Membre à l'essai
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 88
Points : 22
Points : 22
Arg, déso, j'avais pas fait attention, je corrige ça ^^

mais la question reste toujours : quel sera la valeur de l'index pour le ?

ou bien ne peut t'on pas mixer ses deux méthodes ?
Valkirion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h32   #4
Membre à l'essai
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 88
Points : 22
Points : 22
je viens de trouver la réponse ^^:

Vous ne pouvez pas utiliser les marqueurs nommés et les marqueurs interrogatifs dans une même requête SQL ; choisissez l'un ou l'autre

http://be.php.net/manual/fr/pdo.prepare.php

par contre, pourquoi ne peut t'on pas mettre de nom de table ? sur php.net, les exemples ont pourtant un nom de table non binder ?
Valkirion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h35   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Citation:
Envoyé par Valkirion Voir le message
par contre, pourquoi ne peut t'on pas mettre de nom de table ? sur php.net, les exemples ont pourtant un nom de table non binder ?
quel exemple ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 15h49   #6
Membre à l'essai
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 88
Points : 22
Points : 22
http://php.net/manual/en/pdo.prepare.php

les requetes dans les examples de cette page par exemple
Valkirion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 16h23   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Citation:
Envoyé par Valkirion Voir le message
http://php.net/manual/en/pdo.prepare.php

les requetes dans les examples de cette page par exemple
y'en a aucun avec un paramètre pour les tables
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2012, 17h29   #8
Invité régulier
 
Inscription : février 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 11
Points : 8
Points : 8
Citation:
Envoyé par Valkirion Voir le message
par contre, pourquoi ne peut t'on pas mettre de nom de table ? sur php.net, les exemples ont pourtant un nom de table non binder ?
il me semble que lorsque tu utilise la fonction bindValue() elle ajoute automatiquement des guillemet et ça te donnerai
Code :
select '*' FROM 'dblist' where Db = 'test'
Ce qui n'est pas autorisé puisque ca te retourne une erreur #1064.

Pour info, il n'est pas recommandé d'utiliser autre chose que des variable dans un bindValue(). exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
// A éviter
$stmt->bindValue(':table','dblist');
$stmt->bindValue(':cols','*');
$stmt->bindValue(1,'test');
 
 
// Recommandé
$table = 'dblist';
$cols = '*';
$value = 'test' ;
$stmt->bindValue(':table',$table);
$stmt->bindValue(':cols',$cols);
$stmt->bindValue(1,$value);
Sp4tz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2012, 17h53   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Citation:
Envoyé par Sp4tz Voir le message
il me semble que lorsque tu utilise la fonction bindValue() elle ajoute automatiquement des guillemet et ça te donnerai
Code :
select '*' FROM 'dblist' where Db = 'test'
Ce qui n'est pas autorisé puisque ca te retourne une erreur #1064.

Pour info, il n'est pas recommandé d'utiliser autre chose que des variable dans un bindValue(). exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
// A éviter
$stmt->bindValue(':table','dblist');
$stmt->bindValue(':cols','*');
$stmt->bindValue(1,'test');
 
 
// Recommandé
$table = 'dblist';
$cols = '*';
$value = 'test' ;
$stmt->bindValue(':table',$table);
$stmt->bindValue(':cols',$cols);
$stmt->bindValue(1,$value);
mais non ça marche pas, faut pas dire n'importe quoi,
les requêtes préparées c'est pas pour faire joli et jouer le rôle d'un sprintf

http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h20.


 
 
 
 
Partenaires

Hébergement Web