我使用此查询插入记录,并防止为雪深度插入0。我使用NULL,但这是最好的方法吗?
if ($snow_mountain==0) {$snow_mountain=null;}
if ($snow_valley_min==0) {$snow_valley_min=null;}
if ($snow_valley_max==0) {$snow_valley_max=null;}
$rQuery13 = "UPDATE sv_snow
SET snow_valley_min=$snow_valley_min, snow_valley_max=$snow_valley_max,snow_mountain=$snow_mountain, templo='$templo', temphi='$temphi', lifts_open='$lifts', ski_id=$ski_id
WHERE res_id=$res_id AND lud='$today'";
echo $rQuery13;
$rResult13 = mysql_query($rQuery13);发布于 2013-11-09 12:18:08
这完全取决于列的数据类型,如果您定义为int,那么它的默认值是0,定义为varchar和null,那么它的默认值是null。
$rQuery13 = "UPDATE sv_snowalert
SET snow_valley_min='".$snow_valley_min."', snow_valley_max='".$snow_valley_max."',snow_mountain='".$snow_mountain."', templo='".$templo."', temphi='".$temphi."', lifts_open='".$lifts."', ski_id='".$ski_id."'
WHERE res_id='".$res_id."' AND lud='".$today."' ";
echo $rQuery13;
$rResult13 = mysql_query($rQuery13);发布于 2013-11-09 12:39:44
更好的方法是避免使用NULL,而不是使用NULL来考虑一些您从未料想到的值。大多数情况下,我最终使用的是负值。
但是由于某种原因,如果您必须使用NULL,首先将列更改为允许NULL,例如:
ALTER TABLE `sv_snowalert`
CHANGE `snow_valley_min`
`snow_valley_min` INT( 11 ) NULL DEFAULT NULL ;然后可以插入空值,例如:
INSERT INTO `sv_snowalert` ( `snow_valley_min` ) VALUES ( NULL );此外,您还可以在更新查询中使用如果()函数:
$snow_mountain = 0; // For test
$res_id = 1; // For test
$today = '2013-11-11 00:00:00'; // For test
$rQuery13 = "
UPDATE
sv_snow
SET
snow_mountain
= IF( '" .$snow_mountain ."' = '0' ,NULL ,'" .$snow_mountain ."' )
WHERE
res_id = '" .$res_id ."'
AND lud = '" .$today ."'";
echo $rQuery13;发布于 2013-11-09 12:14:55
在数据库设置中,始终可以使用set null作为默认值,而不为这3指定任何属性。
但是null有时会很麻烦,我通常给-1或假或-1000的东西非常具体。
https://stackoverflow.com/questions/19875783
复制相似问题