Requête préparée en insert et colonne "not null" - PHP - Programmation
Marsh Posté le 20-04-2007 à 16:51:59
Alors en fait, après un repos nocturne, j'ai dit une petite bêtise hier
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é
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?
Marsh Posté le 20-04-2007 à 18:34:19
leflos5 a écrit : Alors en fait, après un repos nocturne, j'ai dit une petite bêtise hier |
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).
Marsh Posté le 20-04-2007 à 18:35:25
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
Marsh Posté le 21-04-2007 à 02:50:49
Non c'est +null ou -null, me suis peut être mal exprimé
C'est justement en pensant à ça que j'ai testé et vu que (float)-null donne 0
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 ) 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 (==null mais !===null)
(float)null- => ça donne rien dans le null
Marsh Posté le 21-04-2007 à 03:00:18
Hé bé, php c'est vraiment, de la merde...
Dans le même temps
Code :
|
Renvoie true, j'ai jamais pris de cours de prog, mais c'est un peu con non?
Marsh Posté le 21-04-2007 à 03:23:23
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 ...
Marsh Posté le 21-04-2007 à 04:13:27
Shinuza a écrit : Hé bé, php c'est vraiment, de la merde...
|
0 c'est pas rien
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
Pour parler concrètement, t'as un verre, il est propre ou a déjà servi (je passe le cas du verre mal lavé ), 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
Marsh Posté le 21-04-2007 à 09:56:22
leflos5 a écrit : Non c'est +null ou -null, me suis peut être mal exprimé |
c'est nul ton truc
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
Marsh Posté le 21-04-2007 à 09:59:11
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
Marsh Posté le 21-04-2007 à 10:00:39
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).
Marsh Posté le 21-04-2007 à 12:02:55
Isset en php vérifie qu'une variable existe, quelque soit sa valeur genre
--fuck.php?you
Code :
|
Renverra true, et
Code :
|
Renverra true également
Après pour les autres languages je sais pas
leflos5 a écrit : 0 c'est pas rien |
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
Marsh Posté le 21-04-2007 à 13:51:45
Ah putain j'avais pas fait gaffe à ton code J'aurais jamais dit que ça retournerait vrai...
Marsh Posté le 20-04-2007 à 00:23:53
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?