phpMyAdmin et default value forcée ?

phpMyAdmin et default value forcée ? - PHP - Programmation

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
Reply

Marsh Posté le 12-02-2009 à 14:34:43   

Reply

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

Message cité 1 fois
Message édité par flo850 le 12-02-2009 à 14:56:04

---------------

Reply

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

Reply

Marsh Posté le 12-02-2009 à 15:09:12    

J'ai des chaines de caractères par defaut, des flotants, meme des dates...

Reply

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


---------------

Reply

Marsh Posté le 12-02-2009 à 15:14:27    

flo850 a écrit :

$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


le but est simplement de savoir si $val est null ? Alors :

Code :
  1. $val === NULL

:??:

Reply

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

Reply

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


Message édité par vhAnton le 12-02-2009 à 15:34:35
Reply

Marsh Posté le 12-02-2009 à 16:20:45    

is_null?


---------------
Can't buy what I want because it's free -
Reply

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.

Reply

Marsh Posté le 12-02-2009 à 16:34:31   

Reply

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

Reply

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

Reply

Marsh Posté le 13-02-2009 à 16:10:54    

vhAnton a écrit :

(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


 
Un champ non obligatoire sans valeur par défaut aura forcément "null" comme valeur par défaut, non?[:dawao]


---------------
Can't buy what I want because it's free -
Reply

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

Message cité 1 fois
Message édité par vhAnton le 13-02-2009 à 16:26:39
Reply

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

Reply

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é,  
Extrait d'un describe d'une de mes table :
Field                         Type                 Null           Default
prenom                     varchar(64)       NO       NULL    
nom_jeune_fille         varchar(64)       NO


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.:o


---------------
Can't buy what I want because it's free -
Reply

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.

Reply

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


Message édité par vhAnton le 13-02-2009 à 16:36:05
Reply

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...:o


---------------
Can't buy what I want because it's free -
Reply

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


Message édité par vhAnton le 13-02-2009 à 16:54:09
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed