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 :

rowcount donne une mauvaise valeur [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut rowcount donne une mauvaise valeur
    Bonjour,

    Je veux compter le nombre d'enregistrements de ma table répondant à ma condition ET pour lesquels le contenu d'une colonne donné doit être non nul:

    Si je fais ceci, le nombre obtenu n'est pas le bon. Je pense que c'est dû au fait que ma variable n'est pas interprétée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'SELECT * FROM ma_table WHERE ('   ."$id_Item".   ' = '.  $_SESSION["id_Item"].   ' AND '. $id_Item.' !=0) ';
    $resultat = $pdo->prepare($sql);
    $resultat->execute();
    $nb_hits_non_nuls = $resultat->rowCount();
    Si je modifie ainsi, j'obtiens une erreur Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql ="SELECT * FROM 'coursinfo_membres_cours' WHERE (`$id_Item` = ".$_SESSION['id_Item']." AND $id_Item !=0) ";
    $resultat = $pdo->prepare($sql);
    $resultat->execute();
    $nb_hits_non_nuls = $resultat->rowCount();
    Je vous remercie de bien vouloir m'aiguiller.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Sauf erreur de ma part il faut d'abord faire un fetch pour pouvoir compter le nombre de ligne. (je ne suis pas sur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $resultat->execute();
    $resultat->fetch(PDO::FETCH_ASSOC);
    $nb_hits_non_nuls = $resultat->rowCount();

  3. #3
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Bonjour tyjez,

    Merci pour ton intervention mais ça ne change rien.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    es-tu certain du fonctionnement de ta requête ?
    j'aurai plutot fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT * FROM 'coursinfo_membres_cours' WHERE (".$id_Item." = ".$_SESSION['id_Item']." AND ".$id_Item." !=0) ";

  5. #5
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Non, je suis pas sûr de ma requête.

    Avec ta proposition, j'obtiens la même erreur
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''ma_table' WHERE (2001 = 2001 AND 2001 !=0)' à la ligne 1'

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    et comme ca ?
    c'est bizzare comme requete quand meme. tu as des noms de champs de ta table qui correspondent aux données qu'ils contiennent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT * FROM coursinfo_membres_cours WHERE (".$id_Item." = ".$_SESSION['id_Item']." AND ".$id_Item." !=0) ";
    Citation Envoyé par Denis Placé Voir le message
    Non, je suis pas sûr de ma requête.

    Avec ta proposition, j'obtiens la même erreur

  7. #7
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Merci encore pour ton implication.

    Ta proposition fonctionne, comme ma première idée, c'est-à-dire en ne donnant pas le bon effectif ;-(
    Curieux....

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    J'aurai d'ailleurs, vue ta demande initiale, fait plutot ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT * FROM coursinfo_membres_cours WHERE (".$id_Item." = ".$_SESSION['id_Item']." AND ".$id_Item." IS NOT NULL) ";
    Citation Envoyé par Denis Placé Voir le message
    Merci encore pour ton implication.

    Ta proposition fonctionne, comme ma première idée, c'est-à-dire en ne donnant pas le bon effectif ;-(
    Curieux....

  9. #9
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Toujours le mauvais effectif....

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    quels sont les champs de ta table ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    on est bien d'accord que tu veux récupérer tous les lignes de la table coursinfo_membres_cours pour lesquelles le champ 2001 contient la valeur 2001 (selon ton exemple)

  12. #12
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Oui, et pour lesquels le contenu de cette même colonne est non nul.
    PS: En fait, ici, c'est la colonne 2001 parce que la variable l'impose, ça peut être d'autres colonnes car il y en a beaucoup.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    En fait j'ai un peu du mal a comprendre ta logique de conception de table mais bon continuons de chercher

    si j'ai bien compris donc ta table 1 contient des colonnes qui peuvent s'appeler 2001 2002 2003 etc
    et les lignes de ta table peuvent être par exemple pour la colonne 2001:
    2001
    2001
    2001
    null
    2001
    null
    ...
    C'est bien ca ?

  14. #14
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Alors, si tu veux la table, la voici.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    CREATE TABLE `ma_table` (
      `_id` int(11) NOT NULL,
      `_pseudo` varchar(255) NOT NULL,
      `2001` decimal(5,2) NOT NULL,
      `2002` decimal(5,2) NOT NULL,
      `2003` decimal(5,2) NOT NULL,
      `2004` decimal(5,2) NOT NULL,
      `2005` decimal(5,2) NOT NULL,
      `2006` decimal(5,2) NOT NULL,
      `2014` decimal(5,2) NOT NULL,
      `2007` decimal(5,2) NOT NULL,
      `2008` decimal(5,2) NOT NULL,
      `2009` decimal(5,2) NOT NULL,
      `2010` decimal(5,2) NOT NULL,
      `2011` decimal(5,2) NOT NULL,
      `2012` decimal(5,2) NOT NULL,
      `2013` decimal(5,2) NOT NULL,
      `2015` decimal(5,2) NOT NULL,
      `2016` decimal(5,2) NOT NULL,
      `2017` decimal(5,2) NOT NULL,
      `2018` decimal(5,2) NOT NULL,
      `2019` decimal(5,2) NOT NULL,
      `2020` decimal(5,2) NOT NULL,
      `2021` decimal(5,2) NOT NULL,
      `2022` decimal(5,2) NOT NULL,
      `2023` decimal(5,2) NOT NULL,
      `2024` decimal(5,2) NOT NULL,
      `2025` decimal(5,2) NOT NULL,
      `2026` decimal(5,2) NOT NULL,
      `2027` decimal(5,2) NOT NULL,
      `2028` decimal(5,2) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `ma_table`
    --
     
    INSERT INTO `ma_table` (`_id`, `_pseudo`, `2001`, `2002`, `2003`, `2004`, `2005`, `2006`, `2014`, `2007`, `2008`, `2009`, `2010`, `2011`, `2012`, `2013`, `2015`, `2016`, `2017`, `2018`, `2019`, `2020`, `2021`, `2022`, `2023`, `2024`, `2025`, `2026`, `2027`, `2028`) VALUES
    (27, 'adet', '3.12', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '3.16', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (28, 'Marvin', '10.57', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (29, 'lisa', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (30, 'tibow', '5.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (31, 'Laurianne', '5.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '13.16', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (32, 'Poam', '10.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (33, 'Roxannb', '10.63', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (34, 'kencous', '5.63', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (35, 'FlorianRuz', '10.63', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (36, 'ntm56000', '1.25', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (37, 'Jerem', '4.38', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (38, 'berfinguclu', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00'),
    (39, 'rebeccab', '6.88', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `ma_table`
    --
    ALTER TABLE `ma_table`
      ADD PRIMARY KEY (`_id`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `ma_table`
    --
    ALTER TABLE `ma_table`
      MODIFY `_id` int(11) NOT NULL AUTO_INCREMENT
    Et selon la valeur prise par les variables $id_Item et $_SESSION['id_Item'], la colonne concernée change.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Le probleme c'est que $id_Item et $_SESSION['id_Item'] ont l'air de retourner le même résultat.
    D'après ce que j'ai compris en analysant tes données de table, il faudrait que ta requête te renvoie par exemple
    WHERE 2001 = 3.12
    Tu confirmes ?
    Si c'est le cas il y a un problème lorsque tu alimentes ta $_SESSION['id_Item']

  16. #16
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    En fait, les 2 variables prendront systématiquement la même valeur et cela correspondra à la colonne visée.
    Pas toujours évident à cerner quand on ne connait pas le contexte mais c'est comme ça que ça fonctionne.
    Merci encore pour ton implication.

  17. #17
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Je me permets d'intervenir.

    Nommer un champ avec une valeur numérique c'est du jamais vu (en 30 ans de carrière) ! Ce n'est pas parce que c'est faisable que c'est à faire.

    Question. Pourquoi avoir choisi une telle structure plutôt qu'une structure : id, pseudo, année, valeur ?

    Car à ce que je vois pour chaque enregistrement dans ta table il y plus de 20 champs qui ne servent à rien. Il y aurait d'autres choses à dire.

    Je pense que la requête fonctionnera si le champ est entouré par le caractère ` car un nombre n'est pas un nom de champ valable et le fameux caractère sert notamment à pouvoir donner à des champs des noms qui correspondent à des mots clés du SQL.

    En effet si dans la clause where on a 2001 = 3.12 alors on n'obtiendra rien car 2001 est différent de 3.12 tout comme 5 est différent de 45.
    Par contre si on a `2001` = 3.12 alors on obtiendra quelque chose car on comparera la valeur du champ nommé 2001 avec 3.12. C'est justement pour éviter ces désagréments qu'on ne nomme jamais un champ avec uniquement des chiffres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql ="SELECT * FROM coursinfo_membres_cours WHERE (`".$id_Item."` = ".$_SESSION['id_Item']." AND `".$id_Item."` IS NOT NULL) ";

    Nom : Capture20190108_001.JPG
Affichages : 109
Taille : 19,4 Ko

    S'il s'agit uniquement de compter les enregistrements un select count(*) as comptage from etc... suffit. Cela à l'avantage, entre autres, de consommer beaucoup moins de mémoire que de ramener toutes les données et de faire un rowCount.

    Tu peux utiliser prepare avec bindParam. Mais comme tu as des noms de champs variables c'est moins intéressant.

    Question pour des gens plus calés que moi. Est-ce qu'il y a un risque d'injection SQL si les noms des champs sont variables ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql ="SELECT * FROM coursinfo_membres_cours WHERE (`".$id_Item."` = :id_item AND `".$id_Item."` IS NOT NULL) ";
    $resultat = $pdo->prepare($sql);
    $resultat->bindParam(':id_item', $_SESSION['id_Item']);
    $resultat->execute();
    $nb_hits_non_nuls = $resultat->rowCount();
    Pour ma curiosité. C'est un projet personnel (apprentissage) ou bien professionnel ?

  18. #18
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 485
    Par défaut
    Bonjour badaze et merci pour ton post très complet,

    Citation Envoyé par badaze Voir le message
    Question. Pourquoi avoir choisi une telle structure plutôt qu'une structure : id, pseudo, année, valeur ?
    Car à ce que je vois pour chaque enregistrement dans ta table il y plus de 20 champs qui ne servent à rien. Il y aurait d'autres choses à dire.
    Si, si, les 20 champs en question serviront. Pour l'instant, je n'en suis qu'en phase de test et de réflexion donc ils sont encore vides.
    En fait, j'en suis venu là pour tenter d'éviter un case avec plus de 20 modalités. Je veux effectuer mon comptage sur une colonne donnée selon la valeur prise par ma variable de session.


    Citation Envoyé par badaze Voir le message
    Je pense que la requête fonctionnera si le champ est entouré par le caractère ` car un nombre n'est pas un nom de champ valable et le fameux caractère sert notamment à pouvoir donner à des champs des noms qui correspondent à des mots clés du SQL.
    Je viens d'essayer et cela ne change pas.

    Citation Envoyé par badaze Voir le message
    S'il s'agit uniquement de compter les enregistrements un select count(*) as comptage from etc... suffit. Cela à l'avantage, entre autres, de consommer beaucoup moins de mémoire que de ramener toutes les données et de faire un rowCount.
    Je vais essayer ça en effet.

    Citation Envoyé par badaze Voir le message
    Pour ma curiosité. C'est un projet personnel (apprentissage) ou bien professionnel ?
    C'est pour moi ;-)

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Je suis tout a fait de l'avis de badaze et je serais passé par deux tables et requête avec jointure.

    Un première table lié au pseudo: id, pseudo... et tout ce qui est lié à la personne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO table1 (`_id`, `_pseudo`) VALUES 
    (27, 'adet'), 
    (28, 'Marvin')
    etc...
    ;
    Une deuxième table lié à l'id du pseudo: id, pseudoId, année, valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO table2 (pseudoId, annee, valeur) VALUES 
    (27, 2001, 3.12),
    (27, 2002, 0.00);
    etc
    et pour l'équivalent de ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql ="SELECT COUNT(*) FROM table2 WHERE (annee = ".$_SESSION['id_Item']." AND annee IS NOT NULL) ";

  20. #20
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par badaze Voir le message
    Question pour des gens plus calés que moi. Est-ce qu'il y a un risque d'injection SQL si les noms des champs sont variables ?
    Tout dépend de la variable : si c'est une variable écrite en dur dans le script, on peut espérer que tu ne mets pas n'importe quoi dans ton script.
    En revanche, si l'information vient de l'extérieur (d'un formulaire par exemple), il faudra protéger la requête en utilisant par exemple une liste des valeurs autorisées et/ou une fonction comme PDO::quote.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 22
    Dernier message: 23/02/2012, 16h11
  2. j'ai donné une mauvaise impression
    Par svenstek dans le forum Entretien
    Réponses: 7
    Dernier message: 09/06/2011, 14h24
  3. [XL-2000] Fonction RECHERCHEV renvoie une mauvaise valeur
    Par kstorfou dans le forum Excel
    Réponses: 3
    Dernier message: 21/12/2009, 09h30
  4. Réponses: 2
    Dernier message: 12/01/2009, 11h27
  5. Réponses: 8
    Dernier message: 17/07/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