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

Langage PHP Discussion :

mysql_insert_id() et les id UNSIGNED ZEROFILL


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut mysql_insert_id() et les id UNSIGNED ZEROFILL
    bonjour,
    j'ai un petit problème,
    lors d'une insertion (sql) je récupère l'id avec mysql_insert_id().
    Dans ma table id a comme type de champs : auto-incrémente, UNSIGNED ZEROFILL...
    Puis je voudrais comparer mysql_insert_id() et id (de la table) mais je ne peux pas, pourquoi ? parce que...
    avec ma condition if, je pense que vous comprendrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $a=0001545; //id que je cherche dans la table 
    $b=1545;  //id que je récupère avec mysql_insert_id().
     
    if($a==$b){ 
        echo " c pareil";
    }else
    { 
        echo "non";
    }
    logiquement et théoriquement j'obtiens bien "non" !
    comment puis-je faire ?
    pour avoir pareil ?

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Salut,

    La solution la plus simple me parrait de caster $a en int non ?

    A+

  3. #3
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    mais $a est du type smallint

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Citation Envoyé par akara
    mais $a est du type smallint
    smallint peut être casté en int sans problème, l'inverse n'est pas vrai.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( ((int)$a) == $b) { ; }

  5. #5
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par KiLVaiDeN
    smallint peut être casté en int sans problème, l'inverse n'est pas vrai.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( ((int)$a) == $b) { ; }
    mais avec cet condition je n'obtiens pas 0001545==1545
    c 'est normal ?

    ///edit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    f( int($a)==$b){ echo " c pareil";}else{ echo "non";}
    j'obtients l'erreur suivante :
    Call to undefined function: int()

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Si tu regardes cette discussion http://www.developpez.net/forums/sho...ighlight=octal tu verras surement une ressemblance avec ton probleme:
    les nombres qui commencent par 0 en PHP sont considérés comme étant en base 8 et non pas en base 10.

    Du coup 0001545 c'est de l'octal et ca vaut en décimal : 869 d'où le fait que c'est toujours différent.
    Est-ce que tu peux retirer les 0 devant ton nombre? Si oui ca sera facile de comparer.
    Si non, est-ce qu'il y a un nombre fixes de 0 (enfin de chiffres dans le nombre)
    si oui tu peux faire ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombreFormate = sprintf("%07d",$b);
    pour transformer $b en un nombre a 7 chiffres avec des 0 devant

  7. #7
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    j'ai fait plusieurs essais :
    $a=0001545;
    $b=1545;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql_verif="SELECT * FROM tb_client WHERE id_clt=$a";
    $result_verif=mysql_query($sql_verif);
    $clt = mysql_fetch_assoc($result_verif);
    echo $clt['nom_clt'];
    ici je n'obtiens rien du tout ! mais si je changeais la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql_verif="SELECT * FROM tb_client WHERE id_clt=0001545";
    la j'ai le echo qui s'affiche...alors que avec $b dans les 2 cas cela fonctionne...
    dans ma table id_clt est de type smallint(7) et attribut UNSIGNED ZEROFILL.



    ////editer
    Je te remercie je vais voir cela !
    je me disais pourquoi j'obtenais 869 , maintenant je comprends,
    Merci

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 444
    Points
    3 444
    Par défaut
    Mince désolé, j'avais pas calculé que tu obtenais de l'octal dans ton $a !

    Avec un bon debuggeur je pense que tu aurais repéré le problème rapidement.

    A+

  9. #9
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    un bon debuggeur?!!
    lequel

  10. #10
    Membre régulier

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 64
    Points : 71
    Points
    71
    Par défaut
    Zend studio peut-etre

  11. #11
    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

    Un nombre qui commence par 0 n'est pas un nombre décimal. C'est soit un nombre octal (et doit donc commencer être préfixé de 0x), soit une chaîne (donc entre apostrophes ou guillemets).

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $a=0001545;
    $b='0001545';
    echo $a.'<br />';
    echo $b.'<br />';
    C'est la même chose dans une requête SQL : lorsque tu indiques 0001545 sans les guillemets, alors le moteur de BDD opère un cast implicite. Il faut mettre les guillemets pour lui dire que c'est une chaîne au lieu d'un nombre décimal.

  12. #12
    Membre régulier Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Points : 122
    Points
    122
    Par défaut
    bonjour,
    compris 5 sur 5

    Merci à Tous

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

Discussions similaires

  1. Les meilleurs cours et tutoriels C++
    Par Community Management dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2015, 13h50
  2. aide sur le type unsigned zerofill
    Par rahimman dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 28/07/2010, 12h20
  3. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 13h46
  4. Réponses: 4
    Dernier message: 10/04/2006, 22h34
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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