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 :

Enregistrement vide: NULL plutôt que 0 [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Par défaut Enregistrement vide: NULL plutôt que 0
    Bonjour,

    J'ai un petit soucis lors de l'enregistrement de données dans ma base de données MySQL. Lorsque j'enregistre un champs vide, au lieu de trouver NULL je trouve 0. Je pense que celà vient de mon code car si j'insère un nouveau champs depuis l'interface de phpMyAdmin je trouve bien la valeur NULL.

    Voilà le bout de code que j'utilise pour l'enregistrement (code recommandé par le CMS Drupal que j'utilise):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, %d)", $node->vid, $node->nid, $node->un_champs);
    Merci pour votre aide

    --- EDIT ---

    Je viens de comprendre quelque chose, comme mon champs est de type entier j'ai mis: %d ce qui est apparemment juste mais si je met:
    $node->un_champs = NULL; ça ne passe évidement pas dans %d. Il faudrait que je mette %s à moins qu'il y ai une autre solution?

  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
    Par défaut
    Qu'est ce qui ne te plait pas dans ta solution ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Par défaut
    Hé bien vu que je n'aimerais enregistrer que des nombres de type entier, ça me semble un peu bizard d'utiliser %s...mais si il n'y a pas de solution autre que cela, je ferais avec.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Je ne connais pas Drupal, mais si en mettant %s et que la valeur du champ est NULL et qu'au bout la valeur enregistrée est bien NULL, je ne vois où est le problème.

    Sinon, reste peut être 2 autres alternatives s'il est possible de rendre cette requête un peu dynamique.

    - Si on détecte que la valeur doit être NULL, pourquoi ne pas mettre NULL plutôt que %s ?
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, NULL)", $node->vid, $node->nid);
    - Idem pour NULL, et bien ça dépend comment c'est défini coté Bdd pour ce champ, mais admettons qu'on accepte une valeur NULL et que sa valeur par défaut est NULL aussi, alors ne pas renseigner le champ (et sa valeur par conséquent) fera qu'une valeur NULL sera enregistrée.
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db_query("INSERT INTO {ma table} (vid, nid) VALUES (%d, %d)", $node->vid, $node->nid);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 83
    Par défaut
    Salut,

    Merci pour ton aide. J'ai dit une grosse bêtise avec le %s, lors de l'enregistrement je me retrouve quand même avec la valeur 0.

    Le problème c'est que se champs pourrait ou non être remplis donc ta deuxième solution ne va pas jouer.

    Maintenant ta première solution jouerait mais se qui voudrait dire si j'ai bien compris que je devrais remplacer le NULL par ma variable.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $une_valeur = empty($une_valeur) ? "NULL": $une_valeur;
    db_query("INSERT INTO {ma table} (vid, nid, un_champs) VALUES (%d, %d, $une_valeur)", $node->vid, $node->nid);
    Je n'ai pas testé cette exemple mais je suis presque certain que ça devrait jouer, le seul problème c'est que je ne suis pas trop sur au niveau de la sécurité. Il parait qu'en faisant comme cela on n'aurait un risque d' attaques par injection SQL. Est-ce vrais?
    J'ai pu lire cela ici: http://kolossaldrupal.org/docs/ecrire-code-securise

  6. #6
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    oui écrit comme ça il y a un probleme.
    alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $une_valeur = empty($une_valeur) ? "NULL": fonction_protection($une_valeur);
    y'en a plus.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/06/2011, 09h38
  2. Réponses: 3
    Dernier message: 28/07/2010, 17h26
  3. [MySQL] [MySQL] Avoir une valeur NULL plutôt que 0 (zéro) dans un champ
    Par Sparktacus dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/07/2010, 17h24
  4. Lister tous les enregistrés vides (not null)
    Par Kijer dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2007, 14h34
  5. LEFT JOIN - Valeur par défaut plutôt que NULL
    Par freegreg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2007, 16h21

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