passant une valeur null à la base de données mysql
Un utilisateur remplit un formulaire et s'ils choisissent de ne pas remplir un champ qui n'est pas nécessaire php fait ceci:
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']=null;
Mais lorsque j'utilise la variable de session dans une requête mysql, le résultat n'est pas nul, mais est de 0. La colonne est un tinyint(4), qui permet à NULL.
Pourquoi suis-je un 0 à la place de NULL?
Nous montrer le code de l'endroit où vous définissez dans la requête.
OriginalL'auteur Ian McCullough | 2009-08-18
Vous devez vous connecter pour publier un commentaire.
Probablement parce que PHP n'est pas la conversion de 'null' dans 'NULL'. Vous êtes probablement juste de l'insertion d'une valeur vide.
Vous avez probablement par défaut pour la colonne à "0", ce qui signifie qu'il va insérer un 0, sauf si vous spécifiez un numéro ou
NULL
Pour résoudre ce problème, vérifiez les Valeurs Null, avant de faire la requête.
J'ai le sentiment que les instructions préparées aura la bonne idée de faire cela automatiquement. Mais, si vous faites inline déclarations, vous avez besoin d'ajouter un peu plus de choses.
MySQL valeurs doivent avoir des devis autour d'eux, mais les valeurs Null ne sont pas. Donc, vous allez avoir besoin de citer tout le reste à l'aide de cette
Ensuite, lorsque vous créez la déclaration, assurez-vous de ne pas placer des guillemets autour de toutes les valeurs
se transforme en
ou
OriginalL'auteur Tyler Carter
Ont un coup d'oeil à la définition de la table pour n'importe quel tableau que vous insérez dans. La valeur "par défaut" pour que le champ est probablement à zéro.
La version de MySql que vous utilisez est très important dans la détermination précise comment MySql traite Type De Données Valeurs Par Défaut.
Le lien ci-dessus dit:
McCullough veuillez voir mon edit. Je pense que votre colonne est configuré pour ne pas accepter les valeurs null et MySql est l'application d'une valeur par défaut. Lire ce lien.
OriginalL'auteur karim79
Vous tous où probablement raison, mais tout ce que j'avais à faire est de mettre des guillemets autour de la valeur nulle.
OriginalL'auteur Ian McCullough
J'ai eu le même problème quelques minutes plus tôt, mais ensuite j'ai pensé à elle. Dans mon cas, j'ai été faire la requête avec le
NULL
variables entre guillemets comme ces", '
. Permettez-moi de m'expliquer...C'est ce que vous voulez faire:
Donc, si vous voulez utiliser un
NULL
variable, il doit être"NULL"
, comme ceci:Maintenant, si vous souhaitez utiliser
$var2
, vous permettra de type'$var2'
dans la requête, mais vous ne devriez pas faire de même pour$var1
:Si vous mettez
$var1
entre guillemets, vous obtiendrez un0
au lieuNULL
.OriginalL'auteur Sarmoc
Pour moi, il n'a pas de travail pour mettre NULL var dans la base de données, j'ai utilisé var char(2).
Donc je viens de faire 2 requêtes. De cette façon, il sera à 100%. Pour votre exemple, il serait:
edit: var char -> var char(2)
OriginalL'auteur TMNuclear
null
analysée à la chaîne devient 0. Essayez d'utiliseris_null
()
de vérification que le premier et le lieuNULL
au lieu de 0 dans la requête.Ou, essayez d'utiliser AOP et PDO::prepare pour un parfait et les cyber-sécurité de la requête.
OriginalL'auteur Havenard
Il est très déroutant surtout lorsque les valeurs ont été validées à partir d'un formulaire web. Je le fais comme ça:
Nous supposons que vous avez besoin d'un champ de base de données nommé "numofchildren' qui accepte les valeurs possibles: NULL, 0, 1, 2.., etc. jusqu'à 99 et de la valeur par défaut doit être la valeur SQL NULL.
SQL champ doit être défini comme:
Lorsque vous insérez vos données pour les valeurs NULL, vous passer des chaînes de caractères comme 'NULL', et de regarder pour eux quand en boucle les données entrantes. Les autres valeurs que vous venez de lancer pour les entiers:
Remarque que {$v['numofchildren']} dans la requête SQL n'est pas entouré de guillemets parce que vous n'avez pas à passer des chaînes de caractères mais des entiers (0,1,2..) ou SQL NULL.
Je crois que c'est clair et court et couvre la question.
OriginalL'auteur Vlado