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 : bind update avec :var et ? ( ordre d'exécution)


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut Pdo : bind update avec :var et ? ( ordre d'exécution)
    Bonjour !

    si je fais le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    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 ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    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 ?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    http://php.net/manual/en/pdo.prepare.php

    les requetes dans les examples de cette page par exemple

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. [MySQL] Upload d'une photo avec Phonegap/PHP - ordre d'exécution de requêtes Mysql
    Par manoulaisamm dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/11/2014, 14h50
  2. [MySQL] Update avec PDO
    Par moudjahidine dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 30/06/2014, 14h28
  3. [PDO] fonction update avec foreach dans pdo
    Par fbrip dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/01/2014, 01h41
  4. Réponses: 3
    Dernier message: 27/10/2007, 11h33

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