Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1547 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requête préparée en insert et colonne "not null"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête préparée en insert et colonne "not null"

n°1545469
leflos5
On est ou on est pas :)
Posté le 20-04-2007 à 00:23:53  profilanswer
 

Salut :)
 
J'ai un truc qui me rend fout depuis tout à l'heure.
 
Mysql 5, pdo, requête préparée pour un insert multiple, si sur un attribut de type not null je lui colle rien ou un truc interdit il me colle une valeur par défaut alors qu'il y en a pas de définie. Cette valeur semble en lien avec le type int=>0, varchar=>chaine vide
 
Je précise que cette même requête ne passe sans requête préparée vu que la valeur pour l'int en question est signée et que donc par exemple ça donne '-' sans chiffre.
 
Pourquoi? Un moyen de pallier à ce vilain défaut?

mood
Publicité
Posté le 20-04-2007 à 00:23:53  profilanswer
 

n°1545870
leflos5
On est ou on est pas :)
Posté le 20-04-2007 à 16:51:59  profilanswer
 

Alors en fait, après un repos nocturne, j'ai dit une petite bêtise hier :D
 
C'est un float, et après retest, en lui donnant un null ça bloque bien, en revanche vu qu'il est signé, si je lui balance une chaine concaténée avec le signe et null ça me fou 0, normal me direz vous une fois casté :whistle:
 
Donc je vais faire autrement et tester la valeur avant mais y'a t-il quand même un moyen qu'en requête préparée, pdo ne cast pas la valeur passée?

n°1545940
MagicBuzz
Posté le 20-04-2007 à 18:34:19  profilanswer
 

leflos5 a écrit :

Alors en fait, après un repos nocturne, j'ai dit une petite bêtise hier :D
 
C'est un float, et après retest, en lui donnant un null ça bloque bien, en revanche vu qu'il est signé, si je lui balance une chaine concaténée avec le signe et null ça me fou 0, normal me direz vous une fois casté :whistle:
 
Donc je vais faire autrement et tester la valeur avant mais y'a t-il quand même un moyen qu'en requête préparée, pdo ne cast pas la valeur passée?


Anormal si tu bosses en mode ANSI NULL, puisque la présence de n'importe quel côté de n'importe quel oppérateur donne comme résultat NULL selon la norme ANSI (fonctionnement similaire au symbol INFINI mathématique).

n°1545941
MagicBuzz
Posté le 20-04-2007 à 18:35:25  profilanswer
 

sinon, pour le coup du cast implicite, vu que PHP n'utilise pas de variables typées, à mon avis c'est rapé.
 
par contre, je suis étonné que null + "" retourne 0 une fois casté en nombre :heink:

n°1546111
leflos5
On est ou on est pas :)
Posté le 21-04-2007 à 02:50:49  profilanswer
 

Non c'est +null ou -null, me suis peut être mal exprimé :whistle:
 
C'est justement en pensant à ça que j'ai testé et vu que (float)-null donne 0 :D
 
Donc j'en déduis que pdo cast implicitement, pas php mais bien pdo :)
Puisque en requête à l'ancienne ça plante (c'est moi qui dirige :d ) mais en préparé je passe la valeur à pdo et là visiblement il transforme le truc (normal vu qu'il doit au moins nettoyer la valeur en l'échappant), mais rapproche t-il le type de l'attribut pour faire un cast implicite :??:
 
 
Après test, concernant php:
(float)-null => null soit 0 mais en fait null n'est pas de type null  :ouch: (==null mais !===null)
(float)null- => ça donne rien dans le null :D

n°1546112
Shinuza
This is unexecpected
Posté le 21-04-2007 à 03:00:18  profilanswer
 

Hé bé, php c'est vraiment, de la merde...
Dans le même temps  

Code :
  1. $var = 0;
  2. if(empty($var))


 
Renvoie true, j'ai jamais pris de cours de prog, mais c'est un peu con non?


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1546113
0x90
Posté le 21-04-2007 à 03:23:23  profilanswer
 

en PHP, ne fais jamais confiance au nom d'une fonction pour savoir ce qu'elle fait, sauf si elle contient "real", et si t'as dla chance ... :o


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1546114
leflos5
On est ou on est pas :)
Posté le 21-04-2007 à 04:13:27  profilanswer
 

Shinuza a écrit :

Hé bé, php c'est vraiment, de la merde...
Dans le même temps  

Code :
  1. $var = 0;
  2. if(empty($var))


 
Renvoie true, j'ai jamais pris de cours de prog, mais c'est un peu con non?


0 c'est pas rien  :o  
Empty ça veut dire ce que ça veut dire, donc rien, un poil de cul, un null, 0 c'est pas rien, c'est un poil de cul, un null ou un 0  :kaola:  
 
Pour parler concrètement, t'as un verre, il est propre ou a déjà servi (je passe le cas du verre mal lavé  :o ), il est propre (vide de chez vide) ou a servi (vide mais déjà utilisé). Null c'est pas vide, ça a servi, mais y'a plus rien  :whistle:

n°1546121
MagicBuzz
Posté le 21-04-2007 à 09:56:22  profilanswer
 

leflos5 a écrit :

Non c'est +null ou -null, me suis peut être mal exprimé :whistle:
 
C'est justement en pensant à ça que j'ai testé et vu que (float)-null donne 0 :D
 
Donc j'en déduis que pdo cast implicitement, pas php mais bien pdo :)
Puisque en requête à l'ancienne ça plante (c'est moi qui dirige :d ) mais en préparé je passe la valeur à pdo et là visiblement il transforme le truc (normal vu qu'il doit au moins nettoyer la valeur en l'échappant), mais rapproche t-il le type de l'attribut pour faire un cast implicite :??:
 
 
Après test, concernant php:
(float)-null => null soit 0 mais en fait null n'est pas de type null  :ouch: (==null mais !===null)
(float)null- => ça donne rien dans le null :D


c'est nul ton truc :D
 
oui, PDO fait, et doit faire, un cast implicite de ta valeur vers le type attendu (même normalement, il ne devrait accester que le type choisi en entrée, mais vu qu'en PHP les variables sont pas typables...)
par contre qui dit "cast implicite" ne veut pas dire "n'importe quoi".
et là, PHP et/ou PDO font un bon mic mac.
 
anyway : teste tes variables avant de les envoyer, ce sera plus simple ;)

n°1546123
MagicBuzz
Posté le 21-04-2007 à 09:59:11  profilanswer
 

sinon, pour le coup du "isempty", j'ai une pierre à rajouter.
 
Vu le nom de la fonction, c'est maxim pompé sur VB, et en VB, IsEmpty(variable) retourne effectivement true pour un type de valeur.
 
IsNull() => Teste la valeur (type de valeur uniquement) et retourne true si c'est le néant total.
IsObject() => Teste si la valeur est un pointeur vers un objet.
IsEmpty() => Teste si la valeur est un pointeur vers un objet non instancié ou un Array() sans éléments.
 
 
=> Du coup, un IsEmpty() devrait planter sur un type de valeur, car il n'est pas fait pour ça. Par contre, un vu qu'un type de valeur ne pointe pas sur un objet instancié, ni un tableau rempli de valeurs... bah il est tout naturel de retourner true ;)


Message édité par MagicBuzz le 21-04-2007 à 10:04:26
mood
Publicité
Posté le 21-04-2007 à 09:59:11  profilanswer
 

n°1546124
MagicBuzz
Posté le 21-04-2007 à 10:00:39  profilanswer
 

IsSet() mais ça je sais plus dans quel langage c'est, indique si la variable à sa valeur par défaut ou non (types de valeur uniquement).

n°1546167
Shinuza
This is unexecpected
Posté le 21-04-2007 à 12:02:55  profilanswer
 

Isset en php vérifie qu'une variable existe, quelque soit sa valeur genre
 
--fuck.php?you
 

Code :
  1. if(isset($_GET['you']))


 
Renverra true, et
 

Code :
  1. if(empty($_GET['you']))


 
Renverra true également
 
Après pour les autres languages je sais pas :D
 

leflos5 a écrit :

0 c'est pas rien  :o  
Empty ça veut dire ce que ça veut dire, donc rien, un poil de cul, un null, 0 c'est pas rien, c'est un poil de cul, un null ou un 0  :kaola:  
 
Pour parler concrètement, t'as un verre, il est propre ou a déjà servi (je passe le cas du verre mal lavé  :o ), il est propre (vide de chez vide) ou a servi (vide mais déjà utilisé). Null c'est pas vide, ça a servi, mais y'a plus rien  :whistle:


Allo? Je sais bien, je dis justement que dire que 0 est empty c'est con.
Tu peux transporter un tableau de valeur ou tu veux avoir des zéros, mais ou tu peux avoir du vide, et la t'es baisé, obligé d'utiliser un truc trivial pour simuler un comportement intélligent


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1546222
leflos5
On est ou on est pas :)
Posté le 21-04-2007 à 13:51:45  profilanswer
 

Ah putain j'avais pas fait gaffe à ton code  :ouch: J'aurais jamais dit que ça retournerait vrai...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requête préparée en insert et colonne "not null"

 

Sujets relatifs
Afficher le résultat d'une requête mysql sous forme d'hyperlienCorrection d'une requete SQL Delete....
Mois en titre de colonneSELECT dans un INSERT mysql
Variable dans macro Excel et requête SQLRequête MAX sur MySQL
Transposer les données d'une Colonne MySql en plusieurs ColonnesProbleme de requête (group by)
[PostGreSQL] Inserer une requete dans un champ ?[excel] : incrémenter une cellule, puis récupérer sa valeur temporaire
Plus de sujets relatifs à : Requête préparée en insert et colonne "not null"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR