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 :

Message d'erreur quand une requête échoue [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut Message d'erreur quand une requête échoue
    Bonjour,

    Je viens de tester ma première requête et la gestion des erreurs et je n'en reviens pas.
    Si par exemple dans un SELECT on fait une erreur sur l'orthographe d'une colonne, on obtient l'erreur
    expects exactly 1 parameter, 0 given
    J'avais exactement le même message inutile avec ColdFusion et une bd Access sous ODBC.
    Quel genre de parser est utilisé qui n'est pas capable de dire
    unknown column name : ...
    ?

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Encore faudrait-il qu'il sache que c'est bien le nom d'une colonne que tu voulais mettre.

    Visiblement, la syntaxe SQL permet de spécifier soit le nom d'une colonne, soit le nom d'un paramètre. Par défaut, ton parser, ne reconnaissant pas une colonne, se dit que c'est surement un paramètre et attend donc que tu lui fournisse la valeur de ce paramètre mais tu n'en fournie aucune, d’où le message d'erreur "1 paramètre attendu, 0 reçu"
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    d’où le message d'erreur "1 paramètre attendu, 0 reçu"
    Bon, d'accord, mais s'il ne reçoit pas de valeur pour le paramètre, il pourrait au moins donner son nom, et même revenir en arrière, sa supposition n'étant pas vérifiée et supposer qu'il s'agit bel est bien d'une colonne erronée puisqu'il n' a pas de valeur de paramètre.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne sais pas ce que tu fais mais l'erreur Mysql en cas de cas inconnu est bien, par exemple dans un SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'zorglub' in 'field list'
    Concernant ton message, si tu n'as pas de question et qu'il s'agit seulement d'exprimer ce qui ne te plait, c'est un peu inutile, nous sommes ni les developpeurs, ni le service apres-vente de PHP et de Mysql.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Bonsoir,

    Quel genre de parser est utilisé qui n'est pas capable de dire
    C'est un parseur haute performance pour la production.

    Si tu souhaite un parser qui t'indique de beau message d'erreur, il te faudra utiliser un debugger SQL

    Bien à toi,

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je ne sais pas ce que tu fais mais l'erreur Mysql en cas de cas inconnu est bien, par exemple dans un SELECT :
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $sql = <<<SQL
      SELECT Matricule,
        zorglub
      FROM personnes
    SQL;
    $getMembers_res = $application->database->query($sql) or trigger_error(mysqli_error(), E_USER_ERROR);
    ?>
    Ça me donne bien
    mysqli_error() expects exactly 1 parameter, 0 given
    À mon tour de te demander comment tu fais ?
    Concernant ton message, si tu n'as pas de question
    Ah mais qui sait ? Je vais peut-être finir par savoir comment obtenir un « vrai » message d'erreur.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le message d'erreur porte sur la fonction mysqli_error() pas sur la requête. Tu n'as pas indiqué l'identifiant de la connexion et c'est bien ce que te dis l'erreur : il faut 1 paramètre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    La connexion c'est l'objet $application->database, la preuve que ça marche est que j'obtiens le bon résultat quand il n'y a pas d'erreur SQL.
    J'ai fait un test exprès en donnant un nom de colonne bidon pour tester la récupération de l'erreur.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quand il n'y a pas d'erreur, il n'y a pas de déclenchement du mysqli_error(), donc pas de problème d'absence du paramètre.
    Enfin ... il faut juste lire le message d'erreur, il n'y a pas de subtilité.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par sabotage Voir le message
    donc pas de problème d'absence du paramètre.
    Bon, mais ça n'explique pas comment moi avec une colonne « Zorglub » MySQL prétend qu'il y a un paramètre sans valeur et toi on te dit que « Zorglub » n'est pas une colonne connue.

  11. #11
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    il n'y a pas de subtilité
    sabotage t'as expliqué pourquoi. Mais on dirai que ca ne suffit pas, alors je vais essayer avec mes mots.

    Tant que tu n'as pas d'erreur SQL, la fonction mysqli_error() n'est pas executer. Donc pas d'erreur (...Oui voila, c'est lessieur...)
    Mais quand tu a une erreur SQL la fonction query() return FALSE et donc error_trigger est appelé/exécuté qui lui même appelle mysqli_error() Or mysqli_error() n'ayant pas le paramètre requis php retourne une erreur de type : paramètre manquant. Voila pourquoi.

    Si tu ajoute l'identifiant de connexion a mysqli_error(application->database->link) et que tu fais une erreur SQL, tu aura une erreur SQL affiché.

    Si tu n'ajoute pas le paramètre manquant php retournera en priorité "parametre manquant" et n'executera pas mysqli_error(), du coup tu ne connaitra pas l'erreur.

    Perso, j'aurai fais la meme erreur que toi car je pensais que mysqli_error() utiliserai le derniers identifiant de connexion crée.

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 256
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Gaulouis Voir le message
    Si tu ajoute l'identifiant de connexion a mysqli_error(application->database->link) et que tu fais une erreur SQL, tu aura une erreur SQL affiché.
    Ah OK, là je comprends ! Et comme ça ça marche en effet.
    je pensais que mysqli_error() utiliserai le derniers identifiant de connexion crée.
    C'est bien ce que laisse entendre la documentation :
    The mysqli_error() function returns the last error description for the most recent function call, if any.
    Mais le paramètre n'est pas facultatif.

    Merci à toi et à Sabotage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Message d'erreur inconnu sur une requête : #Fonct!
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 14/09/2015, 12h11
  2. Attraper message d'erreur lors d'une requête d'ajout
    Par steps5ive dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/12/2006, 16h53
  3. Erreur lors d'une requête d'ajout
    Par olivia.of dans le forum Access
    Réponses: 13
    Dernier message: 14/02/2006, 12h18
  4. [Formulaire] Gestion erreur saisie d'une requête
    Par b_steph_2 dans le forum IHM
    Réponses: 6
    Dernier message: 05/01/2006, 16h40
  5. [C#] Message d'erreur vide dans une replication et rda
    Par Roach- dans le forum Windows Forms
    Réponses: 25
    Dernier message: 05/04/2005, 15h19

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