phpMyAdmin et default value forcée ? - PHP - Programmation
Marsh Posté le 12-02-2009 à 14:55:51
$val === 0
$val === ''
$val === false
si aucun de ces cas, alors c'est null ( sauf oubli )
les 3 egals permettent de verifier le type en même temps
Marsh Posté le 12-02-2009 à 15:05:18
J'ai d'autres valeurs par defaut possible ("(par exemple)" ), je vais quand meme creuser cette voie.
Merci
Marsh Posté le 12-02-2009 à 15:09:12
J'ai des chaines de caractères par defaut, des flotants, meme des dates...
Marsh Posté le 12-02-2009 à 15:12:02
oui , mais là , ce que je te donne, c'est juste pour differencier ce qui est null de ce qui est évalué a null
pour le reste, en fonction de ton type de champ , tu sais si tu as la chaine de caractères '1.235' ou la valeur float 1.235
Marsh Posté le 12-02-2009 à 15:14:27
flo850 a écrit : $val === 0 |
le but est simplement de savoir si $val est null ? Alors :
Code :
|
Marsh Posté le 12-02-2009 à 15:22:38
Luc@s ==> Pour une raison que j'ignore, ca ne fonctionne pas. J'ai des default value vide, non renseignées, et $val===NULL renvoie Vrai..
Marsh Posté le 12-02-2009 à 15:33:01
La ou c'est vraiment bizard, c'est que ca fonctionne parfois, mais pas pour tous... Jsuis quand meme pas fou
Du coup le probleme doit venir de ma bdd, jvais aller farfouiller.
Merci
Marsh Posté le 12-02-2009 à 16:20:45
is_null?
Marsh Posté le 12-02-2009 à 16:34:31
Ou bien, reprendre la solution adoptée en pro*C pour Oracle qui consiste à avoir deux variables pour chaque champ : $val et $val_flag_null. C'est un peu lourd d'avoir deux variables, mais c'est assez simple à l'usage.
Marsh Posté le 12-02-2009 à 17:13:03
is_null oui, on ne fait pas plus simple indeed..
Tous cela ne fonctionnait pas, ou mal car j'ai des choses bizard dans ma bdd...
Quand je regarde la structure de ma table dans phpMyAdmin, pour le champ X de ma table Y, je n'ai pas de default value. Par contre, si je fait un DESCRIBE Y;
Surprise ! La je voit <i>NULL</i> en default value (pas pour tous les champs qui n'ont pas de default value..).
J'édite mon champ, le default value est vide. Dans le doute je tape une default value, je valide, il aparait bien (dans la structure et dans le describe), je ré-édite, suprime ma default value (le input type text vide quoi..), je valide. Et la rebelotte, dans la structure tel que phpMyAdmin me l'affiche, pas de default value, et dans le describe, une default value a NULL.
Je suis un peu perdu, ca vous est déjà arrivé ?
Merci
Marsh Posté le 13-02-2009 à 15:58:00
(up =s)
Personne n'a d'idée ? Le probleme parait surement un peu abstrait, mais je ne comprend vraiment pas, les type de mes champs sont de simple varchar la plupart du temps. Et je n'ai pas de valeur par defaut, je n'en veut pas, il n'y en a pas dans la structure de ma table comme me l'affiche phpMyAdmin, mais un describe sur la table me dit qu'il y en a (et pas pour tous les champs, mais je ne trouve aucun recoupement pertinent..).
Merci
Marsh Posté le 13-02-2009 à 16:10:54
vhAnton a écrit : (up =s) |
Un champ non obligatoire sans valeur par défaut aura forcément "null" comme valeur par défaut, non?
Marsh Posté le 13-02-2009 à 16:25:35
J'ai envie de dire non. En tout cas dans la pratique c'est prouvé,
Extrait d'un describe d'une de mes table :
Field Type Null Default
prenom varchar(64) NO NULL
nom_jeune_fille varchar(64) NO
Marsh Posté le 13-02-2009 à 16:27:59
Aie, j'ai mal compris ton message, sans valeur par defaut il aura null comme valeur par defaut, oui, mais je ne veut pas, mon extrait ci-dessus reste pertinent, un NOT NULL avec comme valeur par defaut NULL...
Marsh Posté le 13-02-2009 à 16:28:02
vhAnton a écrit : J'ai envie de dire non. En tout cas dans la pratique c'est prouvé, |
oui enfin dans la pratique si tu insères une ligne sans renseigner le nom de jeune fille (design de la base douteux si tu veux mon avis, d'ailleurs), tu auras null dans ce champ.
Marsh Posté le 13-02-2009 à 16:32:06
Long story short, je stock des données de mes tables dans un fichier CSV. Puis je fait des réinsertions (outil de duplication). Sauf que si j'ai des values NULL, j'ai un insert de la sorte ("ububu","toto",,,).
Et pour des champs int, il me met des 0 a la place des NULL dans la base de donnée (malgres un default value a NULL).
Donc pour contourner cela, j'ai les describe de ma bdd, et si le champ default value de mon field est a NULL, je fait un insert ("ububu","toto",NULL,NULL,NULL).
Avec mes problemes de default values atypiques, je me retrouve a metre un NULL dans un champ qui est NOTNULL, j'obtient bien evidement un $$$$$ cannot be null.
Marsh Posté le 13-02-2009 à 16:33:57
Aie aie aie, tu passe du =o jaune au =o rouge, je crains ta patience...
Design tres douteux je suis d'accord (je ne suis pas le créateur, stage..).
Voir mon message au dessus pour t'expliquer pourquoi ca me pose probleme.
Merci
Marsh Posté le 13-02-2009 à 16:42:09
C'est ton outil qui fait l'insertion à partir de ton fichier csv qui est buggé, là, non?
Si un champ n'est pas renseigné tu ne l'insères pas, point barre, tu ne mets pas null explicitement ou quoi que ce soit...
Marsh Posté le 13-02-2009 à 16:53:15
Mmmm, c'est pas faux.
Il se trouve que je fait mes insert sous la forme
INSERT INTO matable VALUES (......);
Du coup je n'ai pas trop le choix, ducoup il faudrait que je compare ma ligne CSV avec mon DESCRIBE pour construire une requete propre de la forme
INSERT INTO matable (champ,champ,champ) VALUES (......)
Ca va encore me faire faire du traitement pour chaque insert a faire, et vu le nombre de lignes de mes fichiers CSV, jvais pas tarder a tomber sur du TIMEOUT..
edit : Merci
Marsh Posté le 12-02-2009 à 14:34:43
EDIT : Changement de titre, car changement de probleme
Bonjour,
Desolé pour ce titre peu explicite, mais je ne saurai faire mieux.
Je suis ammené a stoquer les DESCRIBE de tables, et j'ai un probleme de NULL;
Pour la default value, pour certain champs elle est a NULL, pour d'autre a 0 (par exemple), et pour d'autre non renseigner. Quand je fait ma requete describe, et que je souhaite le recuperer, il me transforme mon "NULL", en rien. Je ne peut pas lui en vouloir.. Mais du coup je ne peut pas savoir si il y a une default value de valeur NULL, ou si elle n'a pas été renseigner.
Je croyais m'en sortir avec
if($val==NULL) {$val=='NULL';}
Sauf que si le default value n'a pas été renseignée, le $val==NULL renvoie vrai.
Je suis dans une impasse.
Merci d'avance
PS : Je n'utilise pas Oracle, mais MySQL (j'ai lu que oracle avait des specificités la dessus)
Message édité par vhAnton le 12-02-2009 à 17:16:16