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

Requêtes MySQL Discussion :

Requête préparée ne fonctionne pas


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 112
    Points : 89
    Points
    89
    Par défaut Requête préparée ne fonctionne pas
    bonjour, je n'ai rien d'autre sur mon serveur que cette page index:
    ceci fonctionne:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pdo= new PDO('mysql:host=localhost;dbname=developpement;charset=utf8', 'root', 'prout');
    $req = $pdo->query("SELECT * FROM `Adherent`  ");
    print_r($req->fetchAll());
    ceci ne fonctionne pas (aucun retour).
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <?php 
    $pdo= new PDO('mysql:host=localhost;dbname=developpement;charset=utf8', 'root', 'prout');
    $req = $pdo->prepare("SELECT * FROM ?");
    $req->execute(["Adherent"]);
    print_r($req->fetchAll());
     
        ?>

    Dois je contacter un marabout?
    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Le nom des tables dans le FROM n'est pas paramétrable dans ce contexte.
    Très peu de SGBD supportent le polymorphisme et de toute façon ce ne sera pas avec cette syntaxe.

    Votre seule option est de construire la chaîne du query manuellement côté client.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En même temps, select * est à proscrire dans une application, à la fois pour des raisons de stabilité des résultats, d'indépendance des données et des traitements et de performances.
    Mais, si on remplace * par la liste des colonnes utiles, la requête ne fonctionnera que pour une structure de données.

    Du coup l'intérêt me semble plus que limité. Quel est le besoin exactement ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 112
    Points : 89
    Points
    89
    Par défaut
    le "select *" est surtout la pour simplifier la requette en vu de la résolution du bug. Mais par ailleurs, je l'utiliserait parfois sur des tables, ou j'aurais besoin du coté client de l'intégralité des données de la table, et parfois je ferais plus précis, en fonction du contexte.
    Donc à prioris , je suis partie pour faire les vérification en PHP directement, ca fera du code moche.

  5. #5
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Code moche? Pourquoi?

    Quelque chose du style

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($Chx_table == 'Adherent') 
        $sql = 'SELECT * FROM `Adherent`';
     
    if ($Chx_table == 'Activites') 
        $sql = 'SELECT * FROM `Activites`';
     
    etc.

    Pierre

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 769
    Points : 52 722
    Points
    52 722
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par vaneck Voir le message
    le "select *" est surtout la pour simplifier la requette en vu de la résolution du bug. Mais par ailleurs, je l'utiliserait parfois sur des tables, ou j'aurais besoin du coté client de l'intégralité des données de la table, et parfois je ferais plus précis, en fonction du contexte.
    Donc à prioris , je suis partie pour faire les vérification en PHP directement, ca fera du code moche.
    Non, cela est une aberration... En effet une base de données évolue en permanence. Certaines colonnes sont supprimées car obsolètes, d'autres ajoutées car devenu nécessaires en fonctions de la législation, des modes, des pratiques commerciales de la concurrence...etc !

    En utilisant le SELECT * en production vous vous exposez à des problématiques catastrophiques qui vont produire des résultats faux ou inexploitables...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Sans compter, comme je le disais plus haut, l'impact négatif du select * sur les performances : non seulement on transporte des données inutiles au traitement (charge réseau supplémentaire), mais en plus, on s'interdit l'usage d'index couvrants s'il en existe.
    Double punition !
    Le select * ne devrait être utilisé que pour les requêtes à la volée, jamais dans les traitements

Discussions similaires

  1. [MySQL] Pourquoi cette requête préparée ne fonctionne-t'elle pas ?
    Par Alorslaçaprogramme dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 21/09/2015, 14h37
  2. [MySQL] Requête UPDATE ne fonctionne pas
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 29/01/2007, 23h32
  3. [MySQL] Ma requête SQL ne fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 12h41
  4. [ADO.Net][OleDb] Pourquoi ma requête access ne fonctionne pas?
    Par Bapt.ice dans le forum Accès aux données
    Réponses: 6
    Dernier message: 05/05/2006, 17h19

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