Php 将空值传递给mysql数据库
用户填写表单,如果他们选择不填写不需要的字段,php会执行以下操作:Php 将空值传递给mysql数据库,php,mysql,null,Php,Mysql,Null,用户填写表单,如果他们选择不填写不需要的字段,php会执行以下操作: if($_SESSION['numofchildren']=="") $_SESSION['numofchildren']=null; 但是当我在mysql查询中使用session变量时,结果不是null,而是0。该列是一个允许NULL的tinyint(4) 为什么我得到的是0而不是NULL?请查看插入到哪个表中的表定义。该字段的“默认”值可能设置为零 您正在使用的MySql版本对于确定MySq
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']=null;
但是当我在mysql查询中使用session变量时,结果不是null,而是0。该列是一个允许NULL的tinyint(4)
为什么我得到的是0而不是NULL?请查看插入到哪个表中的表定义。该字段的“默认”值可能设置为零 您正在使用的MySql版本对于确定MySql的处理方式非常重要 上面的链接说: 对于数字类型,默认值为0, 除了整数或 使用声明的浮点类型 自动增量属性,默认值 是序列中的下一个值
可能是因为PHP没有将“null”转换为“null”。您可能只是插入了一个空值
INSERT INTO TABLE (`Field`) ('')
您可能将列的默认值设置为“0”,这意味着除非您指定数字或NULL
INSERT INTO TABLE ('Field') (NULL)
要解决此问题,请在执行查询之前检查空值
foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
}
我有一种感觉,准备好的声明将有远见地自动完成这项工作。但是,如果您使用内联语句,则需要添加更多内容
MySQL值周围必须有引号,但空值不能。因此,您需要引用使用此
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")";
或
null
解析为字符串的值变为0。尝试使用()首先检查该值,并在查询中放置NULL
,而不是0
foreach($values as $key => $value)
{
if($value == null)
{
$values[$key] = "NULL";
}
}
或者,尝试使用and来实现一个完美且黑客安全的查询。你们可能都是对的,但我所要做的就是在null周围加引号
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']='NULL';
几分钟前我也有同样的问题,但后来我发现了。在我的例子中,我使用引号之间的
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
对于我来说,在数据库中放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)这非常令人困惑,尤其是当值从web表单发布时。我这样做: 我们假设您需要一个名为“numochildren”的数据库字段,该字段将接受可能的值:NULL、0、1、2..等。最大值为99,默认值应为SQL NULL值 SQL字段应定义为:
.. `numofchildren` INT( 2 ) NULL DEFAULT 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['numochildren']}没有用单引号括起来,因为您不传递字符串,而是传递整数(0,1,2..)或SQL NULL
我相信它很清楚,很短,涵盖了这个问题。如果您想为数据库中的任何列设置NULL 一开始 您应该检查该列的
是否为null
secuond:如果需要变量
若设置为空代码,则必须在双引号中插入“空”,然后提交到数据库
如果将null设置为双引号(“”)nothing,则不会发送任何内容,数据库将收到错误
例如:
function insert_to_db($var){
...
sql="INSERT INTO table VALUES($var)"
...
}
在代码中使用带“”和不带“”时=>
显示您在查询中设置的代码。@Ian McCullough请查看我的编辑。我认为您的列设置为不可为空,MySql正在应用默认值。请阅读该链接。
function insert_to_db(null)// error : INSERT INTO table VALUES()
correct:
function insert_to_db("null")//its ok