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 :

Valeur de retour d'une requête UPDATE


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Valeur de retour d'une requête UPDATE
    Bonjour à tous,

    J'ai un petit souci avec la gestion des types de données et des valeurs de retour des requêtes que j'exécute.

    Supposons que j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$text = "exemple";
     
    	$query = "UPDATE Table1 SET Champ1 = '$text'";
    	$r_maj = mysql_query($query, $link);
    	echo mysql_error();
    	if ($r_maj)
    		echo "La requête a réussi";
    		else echo "La requête a échoué";
    En bdd, Champ1 est de type Int.

    Est-il normal que je ne recoive ni message d'erreur de mysql_error (je m'attendais à avoir quelquechose comme "mauvais type de données"), ni False comme résultat de mysql_query ?

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!mysql_query($query, $link)){
    echo "Erreur";
    }

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    c'est ce que j'ai mis avec le if ($r_maj)

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Les SGBD gère directement les erreurs et insertions. Donc si tu mets ceci pour un entier, le SGBD ne renverra pas d'erreur. Par contre si tu mets une chaine de caractères il risque de ne pas l'apprécier. Si ton champ BDD était du type chaine et que tu ne mettais pas les quotes, il y aurait une erreur également

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    donc je n'ai aucun moyen de savoir si ma requête a échoué ?

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ben si d'ailleurs tu l'utilises déjà

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($query, $link) or die('Erreur SQL : ' . mysql_error());
    va "casser" l'exécution du script php, et parfois casser l'affichage de page (surtout si c'est la première instruction)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(mysql_query($query, $link))
    {
        //Exécution
    }
    else
    {
        echo 'Erreur SQL : ' . mysql_error();
    }
    Va t'afficher l'erreur, va casser l'exécution du script mais tu n'auras pas de coupure lors de l'affichage

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    excuse-moi, je crois que j'ai mal compris ton premier message

    le problème c'est :
    Citation Envoyé par Eagle959
    Est-il normal que je ne recoive ni message d'erreur de mysql_error (je m'attendais à avoir quelquechose comme "mauvais type de données"), ni False comme résultat de mysql_query ?
    d'après ce que tu me dis, si je mets une chaine de caractères dans un int, je devrais recevoir un message d'erreur, or je n'en recois pas

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Cela ne renvoi aucune erreur mais coté SQL ta chaine de caractères, étant pas du type entier, sera remplacé par l'entier 0 ou la valeur par défaut.

    Donc pour MySQL ce n'est pas une erreur vu qu'il fait un cast de la valeur passée en paramètre. D'où l'utilité, parfois, de tester les valeurs avant insertion.

    Sinon tu peux aussi voir de ce côté :
    mysql.trace_mode boolean Mode trace. Lorsque mysql.trace_mode est activée, des alertes pour scans de table ou d'index, pour oubli de libération des ressources ou erreurs SQL seront affichées. Cette option a été introduite en PHP 4.3.0)

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Kerod
    Cela ne renvoi aucune erreur mais coté SQL ta chaine de caractères, étant pas du type entier, sera remplacé par l'entier 0 ou la valeur par défaut.
    argh d'accord

    Citation Envoyé par Kerod
    D'où l'utilité, parfois, de tester les valeurs avant insertion.
    je dirais toujours

    en fait, ce que je suis en train de faire, c'est que je bosse sur un projet dans lequel toutes les requêtes mysql_query sont exécutées sans le "or die", je pensais donc inclure un gestionnaire d'erreurs "or LogSqlError" sur chaque requête du projet. Mais là je me demande si ca vaut vraiment le coup ?

    Je pensais récupérer dans mon gestionnaire des erreurs de types de données ou de variables trop longues pour le champ dans lequel on voulait faire la mise à jour, etc, mais si php ne me renvoie pas d'erreur ou de false, qu'est ce que je vais pouvoir récupérer comme erreurs ? des erreurs de syntaxe dans la requête uniquement ?

Discussions similaires

  1. Valeur de retour d'une requête "select"
    Par pussyycat dans le forum SPARQL
    Réponses: 0
    Dernier message: 06/01/2013, 23h03
  2. Valeur de retour d'une requête
    Par ebenmous dans le forum SPARQL
    Réponses: 3
    Dernier message: 29/06/2011, 17h35
  3. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 17h52
  4. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  5. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45

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