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 :

'Bad column offset' que signifie cette erreur ? [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut 'Bad column offset' que signifie cette erreur ?
    Bonjour, j'ai un petit soucis.
    Je fais une requete pour générer ensuite un fichier exel.
    Et une fois ma requete executée, je souhaite recupérer tous mes noms de champs pour créer l'entêtre de ma feuille xls.
    pour cela je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $cursorSQL=mssql_query($SQL) or die; 
    $nb_columns=mssql_num_fields($cursorSQL);
    $nb_res=mssql_num_rows($cursorSQL);
    $column=0;
    $line=0;
    while ($column < $nb_columns) 
    {	
          $columnNameOrg=mssql_field_name($cursorSQL,$column);
    //boum boum j'ecris
       $column++;
    }
    et j'ai une erreur sur le mssql_field_name. selon php.net ma version php est bonne, ma requete renvoie bien ce que je veux (ie non vide) et je ne vois pas ce qui ne pourrait ne pas aller, vu que cette portion de script est utilisée ailleurs et fonctionne très bien...
    j'ai les yeux carrés, ca fait une heure que je suis dessus...

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 208
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    Essayez mssql_fetch_field au lieu de mssql_field_name... la signature est identique mais il semblerait que vorte fonction ne soit pas supportée sur certains systèmes avec certains SGBD.

    Si cela ne fonctionne toujours pas ; pouvons nous avoir plus de précision sur le nature de l'erreur produite ?

    8)

  3. #3
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    oui, j'ai vu, j'ai essayé, et j'ai le même warning... (oui c'est pas une erreur, c'est un warning, mille excuses)

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 208
    Points : 218
    Points
    218
    Par défaut
    Et quel est ce warning please ?

  5. #5
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    alors en mettant un @devant la fonction, je n'ai plus ce warning et il me renvoie tout bien correctement.
    le warning etait : Bad column offset on line 151
    je ne veux pas trop le relancer maintenant car ma page est très lourde et ma collègue va raler pour cause de requisition illegale des ressources.
    j'aime pas trop utiliser les @ mais bon...

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    le mssql_field_name c'est la ligne 151 de l'erreur ?

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Le bad column offset surgit pour quel numéro de champ ?
    Est-ce que ce code donne le résultat attendu sans warning ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $cursorSQL=mssql_query($SQL) or die;
    while ($columnNameOrg = mssql_fetch_field($cursorSQL)) {
       //boum boum j'ecris
    }

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    C'est étonnant que cela fonctionne alors qu'il t'envoie une erreur d'index.
    Perso, je n'aurais pas utilisé un while mais plutôt un for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $cursorSQL=mssql_query($SQL) or die;
    $nb_columns = mssql_num_fields($cursorSQL);
    for($column = 0; $column < $nb_columns; ++$column)
    {   
       $columnNameOrg = mssql_field_name($cursorSQL, $column);
       //boum boum t'écris
    }
    C'est une question d'algo : tu sais exactement combien de tours de boucle tu vas faire, le for est donc préférable. Mais cela n'a rien à voir avec le warning d'index.


    PS : avec la solution de Mr N., l'utilisation du while est compréhensible :p

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Kirkis, pourquoi ++$column et pas $column++ ?

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Bof, un prof m'a dit un jour que l'opérateur "++" suffixé est plus lent que l'opérateur "++" préfixé, du coup je l'utilise aussi souvent que possible. Dans ce cas, c'est possible et ça ne peut qu'améliorer le script (aussi faible l'amélioration soit-elle).

    [Edit] La différence se situerait dans le nombre de cycles nécessaires au processeur pour effectuer l'un ou l'autre opérateur "++".

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par Kirkis
    Bof, un prof m'a dit un jour que l'opérateur "++" suffixé est plus lent que l'opérateur "++" préfixé, du coup je l'utilise aussi souvent que possible. Dans ce cas, c'est possible et ça ne peut qu'améliorer le script (aussi faible l'amélioration soit-elle).

    [Edit] La différence se situerait dans le nombre de cycles nécessaires au processeur pour effectuer l'un ou l'autre opérateur "++".
    Ok, merci pour l'info. Mais bon comme tout le monde suffixe, donc pour des raisons de lisibilité, au diable le cycle perdu !

  12. #12
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    le mssql_field_name c'est la ligne 151 de l'erreur ? -->oui et ce meme si j'utilise le fetch_field.

    C'est étonnant que cela fonctionne alors qu'il t'envoie une erreur d'index. -->c'est justement pas une erreur, je l'ai precisé, c'est simplement un avertissement.

    ensuite le temps d'execution ne vient pas de mon while car j'ai entre 10 et 20 colonnes à afficher, en revanche, plus de 6000 lignes donc certaines se fusionnent dans le fichier exel, forcement le serveur de test, il aime pas trop trop.
    les warning apparaissent dès le premier tour de boucle.

    avec un @ j'ai les bon resultats tout comme il faut, alors je ne vois pas trop trop le problème...

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par dor_boucle
    avec un @ j'ai les bon resultats tout comme il faut, alors je ne vois pas trop trop le problème...
    Ben c'est justement le @ le problème. Pour moi warning == erreur => éradication.

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    De mon point de vue également, s'il y a un warning, ce n'est peut-être pas une erreur fatale mais ça reste une erreur qu'il faut corriger.

    Je le répète, il est étonnant que ton script fonctionne étant donné qu'il y a visiblement un décalage incorrect à un moment.

    Consernant le while/for, je n'en parlais pas pour le temps d'exécution (qui doit être similaire dans les deux cas) mais simplement d'habitude de programmation, de norme d'usage, de convention de code ou appelle-ça comme tu veux.

    Et en mixant la solution de Mr N. et la tienne, qu'est-ce que cela donne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $cursorSQL = mssql_query($SQL) or die;
    $nb_columns = mssql_num_fields($cursorSQL);
    while($row = mssql_fetch_assoc($cursorSQL)){
       for($i=0; $i<$nb_columns; ++$i){
          $field = mssql_fetch_field($cursorSQL, $i)
          //traitements
       }
    }

  15. #15
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    kirkis ton bout de code ne repond absolument pa sà mes besoin : regarde ce que tu fais : tu fait un for pour recupérer les champs de ta requete A CHAQUE ligne pas top top non

    non j'ai toujours le warning, que ce soit en fetch_field ou en field_name.

    je sais que les warning est pas bien et en général je les elimine tous car j'ai été dressée au C par un prof intégriste (et les ++i aussi) mais là n'est pas du tout le problème...

    dans les deux cas j'ai le bon resultat qui m'est retourné. c'est bizarre et je ne vois pas d'ou ca pourrai provenir...
    j'utilise exactement les même ligne dans un autre fichier qui prend exactement le meme type de paramètre, sauf que la requete change et cela ne me signale rien du tout...

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je ne sais pas ce que tu souhaites faire, il m'est donc difficile de te donner un code exact. De plus, tu dis toi-même que ça fonctionne donc peu importe ce que je peux te proposer ^^

    Sinon oui, c'est vrai, c'est un peu n'imp ce que j'ai fait précédemment. Complètement stupide, je dirais même.
    Mon idée était de parcourir tous tes tuples et, pour chacun d'eux, les champs. Mauvaise implémentation de la méthode...

    Cela dit, il te reste un warning : mes extraits de code ne visent qu'à essayer différentes méthodes d'accès à tes données afin de voir si l'une d'elles règle ce souci de warning.

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par dor_boucle
    [...]
    dans les deux cas j'ai le bon resultat qui m'est retourné. c'est bizarre et je ne vois pas d'ou ca pourrai provenir...
    j'utilise exactement les même ligne dans un autre fichier qui prend exactement le meme type de paramètre, sauf que la requete change et cela ne me signale rien du tout...
    Tu n'as pas répondu à mes questions :
    Citation Envoyé par Mr N.
    Le bad column offset surgit pour quel numéro de champ ?
    Est-ce que ce code donne le résultat attendu sans warning ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $cursorSQL=mssql_query($SQL) or die;
    while ($columnNameOrg = mssql_fetch_field($cursorSQL)) {
       //boum boum j'ecris
    }
    Fais une correspondance offset/champ et compare avec la requête pour voir si c'est cohérent.

  18. #18
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 208
    Points : 218
    Points
    218
    Par défaut
    Si ca se trouve il faut faire la boucle de 1 à N au lieu de 0 à N-1...
    A un moment il y a un offset qui n'existe pas, ca c'est sur. ou presque.

  19. #19
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    @Mr N
    alors le warning surgissait autant de fois qu'il y a de tour de la boucle

    et ton code ne génère aucune erreur, ni avertissement mais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($columnNameOrg = mssql_fetch_field($cursorSQL)) {
       //boum boum j'ecrise
       echo $columnNameOrg;
    }
    affiche un joyeux ObjectObjectObjectObjectObjectObjectObjectObjectObjectObject

    en fait j'aimerai comprendre la signification de cette erreur, car je ne la comprend pas... mauvais jeu de colonne ?

  20. #20
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je sais pas mais apparemment ca a l'air d'être résolu non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while ($columnNameOrg = mssql_fetch_field($cursorSQL)) {
       echo $columnNameOrg->name;
    }

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

Discussions similaires

  1. RunJasperReports : que signifie cette erreur ?
    Par clavier12AZQSWX dans le forum Général Java
    Réponses: 2
    Dernier message: 05/03/2010, 23h14
  2. Que signifie cette erreur ?
    Par stilgar_karas dans le forum wxWidgets
    Réponses: 2
    Dernier message: 14/12/2009, 12h26
  3. Que signifie cette erreur
    Par BuzzLeclaire dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2009, 13h13
  4. Que signifie cette erreur de compilation ?
    Par Premium dans le forum C
    Réponses: 14
    Dernier message: 22/05/2006, 23h16
  5. [SQL][DERBY] Que signifie cette erreur ?
    Par irenee dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/12/2005, 14h34

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