用户填写表单,如果他们选择不填写不需要的字段,请执行以下操作:
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']=null;
但是当我在mysql查询中使用session变量时,结果不是null,而是0.该列是一个允许NULL的tinyint(4)。
为什么我得到0而不是NULL?
答案 0 :(得分:9)
可能是因为PHP没有将'null'转换为'NULL'。您可能只是插入一个空值。
INSERT INTO TABLE (`Field`) ('')
您可能将列的默认值设置为“0”,这意味着除非您指定数字或NULL
INSERT INTO TABLE ('Field') (NULL)
要解决此问题,请在执行查询之前检查Null值。
foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
}
我觉得准备好的陈述会有先见之明自动完成。但是,如果您正在进行内联语句,则需要添加更多内容。
MySQL值必须有引号,但Null不会。因此,您需要使用此
引用其他所有内容foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
else
{
// Real Escape for Good Measure
$values[$key] = "'" . mysql_real_escape_string($value) . "'";
}
}
然后,在创建语句时,请确保不要在任何值周围加上引号
$SQL = "INSERT INTO TABLE (Field) VALUES(".$values['field'].")";
变成
$SQL = "INSERT INTO TABLE (Field) VALUES("Test Value")";
或
$SQL = "INSERT INTO TABLE (Field) VALUES(NULL)";
答案 1 :(得分:3)
查看您要插入的表格的表格定义。该字段的“默认”值可能设置为零。
您正在使用的MySql版本在确定MySql如何处理Data Type Default Values时非常重要。
以上链接说:
对于数字类型,默认值为0, 除了整数或 用。声明的浮点类型 AUTO_INCREMENT属性,默认值 是序列中的下一个值。
答案 2 :(得分:1)
你们可能都是正确的,但我所要做的就是在空值周围加上引号。
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']='NULL';
答案 3 :(得分:1)
几分钟前我遇到了同样的问题,但后来我发现了。在我的情况下,我使用NULL
这样的引号之间的", '
变量进行查询。让我解释一下自己......
这就是你想要做的:
INSERT INTO `tbl_name` (`col1`, `col2`) VALUES (NULL,"some_value");
因此,如果您想使用NULL
变量,则应为"NULL"
,如下所示:
$var1="NULL"; $var2="some_value";
现在,如果您想使用$var2
,则可以在查询中输入'$var2'
,但不应对$var1
执行相同操作:
INSERT INTO `tbl_name` (`col1`, `col2`) VALUES ($var1,'$var2');
如果您将$var1
放在引号之间,则会0
而不是NULL
。
答案 4 :(得分:1)
对我来说,将NULL var放在数据库中是行不通的,我使用了var char(2)。
所以我只做了2个查询。这样它将100%工作。对于你的例子,它将是:
if($_SESSION['numofchildren']=="")
{
$updatequery="
UPDATE table
SET table1='$value', table2='$value2', numofchilrdrentable=(NULL)
";
}
else
{
$updatequery="
UPDATE table
SET table1='$value', table2='$value2', numofchilrdrentable='$_SESSION[numofchildren]'
";
}
$updatequeryresult=mysql_query($updatequery) or die("query fout " . mysql_error() );
编辑:var char - > var char(2)
答案 5 :(得分:0)
null
变为0.尝试使用is_null
()
先检查,然后在查询中放置NULL
而不是0。
或者,尝试使用PDO和PDO::prepare进行完美且黑客安全的查询。
答案 6 :(得分:0)
特别是当从网络表单发布值时,这非常令人困惑。我这样做:
我们假设您需要一个名为' numofchildren'的数据库字段。将接受可能的值:NULL,0,1,2 ..等,最多99个,默认值应为SQL NULL值。
SQL字段应定义为:
.. `numofchildren` INT( 2 ) NULL DEFAULT NULL
当你为NULL值插入数据时,你会传递像' NULL'之类的字符串。并在循环传入数据时查找它们。您刚刚转换为整数的其他值:
foreach ($data as $v) {
$v['numofchildren'] = !isset($v['numofchildren']) || $v['numofchildren'] === 'NULL' ? '(NULL)' : (int) $v['numofchildren'];
$q = "INSERT INTO tablename (numofchildren) VALUES ({$v['numofchildren']}) ";
...
}
请注意,SQL查询中的{$ v [' numofchildren']}未被单引号括起,因为您不传递字符串而是整数(0,1,2 ..)或SQL NULL。 / p>
我认为它很简洁,涵盖了这个问题。
答案 7 :(得分:0)
如果要为DATABASE中的任何列设置NULL
首先
您应检查is_null
中的该列
secuond:如果您想要的变量 设置为空代码,必须在双引号中插入“ null”,然后提交到数据库
如果将null设置为双引号(“”),则什么也不会发送,并且数据库将收到错误 例如:
function insert_to_db($var){
...
sql="INSERT INTO table VALUES($var)"
...
}
当您在代码中使用“”且不使用“” =>
时function insert_to_db(null)// error : INSERT INTO table VALUES()
correct:
function insert_to_db("null")//its ok