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 :

Récupérer le détail d'une erreur avec mssql_get_last_message() [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut Récupérer le détail d'une erreur avec mssql_get_last_message()
    Bonjour,

    Je travaille sur un projet PHP 5.2 / MSSQL 2005. Je voudrais récupérer une erreur retournée par le serveur SGBD. La fonction mssql_get_last_message() est censée répondre à mon besoin.

    Voici l'exemple #1 de la doc de cette fonction :

    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
     
    <?php
    // Connexion à MSSQL et sélection de la base de données
    mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
    mssql_select_db('php');
     
    // Une requête qui échoue
    $query = @mssql_query('SELECT * FROM [php].[dbo].[not-found]');
     
    if (!$query) {
        // La requête a échoué, retourné un message d'erreur et nous
        // pouvons l'obtenir avec mssql_get_last_message()
        die('Erreur MSSQL : ' . mssql_get_last_message());
    }
    ?>
    J'essaye de suivre cette exemple, avec mssql_query(), qui passe une requête INSERT. Je veux provoquer une erreur en insérant une ligne avec un id déjà existant (l'id est la clé primaire de la table).

    La requête dans Microsoft SQL Server Client me renvoie
    Violation of PRIMARY KEY constraint 'UK_MISSIONS'. Cannot insert duplicate key in object 'dbo.T_MISSIONS'. The statement has been terminated.
    C'est le libellé que j'attends (la violation). Problème, mssql_get_last_message() ne me renvoie que The statement has been terminated, ce qui ne sert à rien, vu qu'il n'y a pas de détail de l'erreur.

    Je n'arrive pas à obtenir le message détaillé de l'erreur. A priori il n'y a pas d'autres fonctions de ce genre. Existe-t-il une autre solution pour y arriver ?

    Merci pour votre aide.

  2. #2
    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
    C'est bien de nous mettre des liens vers la doc comme ça j'ai pu aller voir directement qu'il y avait des solutions pour ton problème dans les commentaires

    Sinon l'extension mssql est arrêtée depuis PHP 5.3 ; Cela fonctionne peut être mieux avec PDO ou Microsoft Drivers for SQL Server.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut
    Hum le seul message qui pourrait m'aider parle d'augmenter le timeout, c'est de celui-ci dont tu parles ? J'ai comme un doute, augmenter le timeout c'est bien, mais "The statement has been terminated" étant la dernière erreur, je crains que jouer sur ce délai ne suffise pas. Il faudrait une fonction qui remonte l'avant-dernière erreur

    Concernant la version, une migration (PHP + MSSQL) est prévue depuis... longtemps, j'aurai probablement fini le dév avant, malheureusement je dois trouver une solution avec les moyens du bord !

    J'essayerai demain, merci pour tes conseils.

  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
    Ca a fonctionné pour lui en tout cas.
    Voir également la fonction au dessus.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut
    Oui, je testerai demain.

    Je n'ai pas peur, je suis juste comme Saint Thomas Je ne compte plus le nombre de fois où la solution trouvée n'a pas fonctionné pour moi, j'attends juste de voir pour confirmer

    Edit : fourbe, tu as édité !

    Le fonction au dessus est pour récupérer l'id, pas l'erreur.

  6. #6
    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
    Non au-dessus-au-dessus
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre expérimenté
    Avatar de Jarodd
    Profil pro
    Inscrit en
    Août 2005
    Messages
    851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 851
    Points : 1 717
    Points
    1 717
    Par défaut
    J'ai un client du genre chiant... Ca fait des mois qu'il parle de migration, et il attend que je m'intéresse aux problèmes pour migrer ! Il a changé le serveur SQL dans la nuit, et a désactivé l'ancien. Donc je n'ai pas pu tester ce timeout !

    Néanmoins merci pour les explications sabotage. Je suis sûr d'avoir un jour un autre client avec un serveur obsolète, je repasserai ici à cette ocasion !

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

Discussions similaires

  1. [XL-2007] Récupérer les détails d'une erreur dans une cellule
    Par Invité dans le forum Excel
    Réponses: 2
    Dernier message: 08/08/2013, 15h20
  2. Récupérer le code d'une erreur Oracle
    Par etoileDesNeiges dans le forum SQL
    Réponses: 6
    Dernier message: 04/10/2007, 10h22
  3. [VB.NET] Pourquoi ai-je une erreur avec GetResponse ?
    Par Arnaud_B dans le forum Services Web
    Réponses: 1
    Dernier message: 25/07/2006, 17h13
  4. une erreur avec les pointeur..
    Par lecyberax dans le forum C
    Réponses: 12
    Dernier message: 15/04/2006, 12h04
  5. [DBExpress] Détail d'une erreur/exception
    Par Laurent Dardenne dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/08/2004, 18h55

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