我通过POST收到以下变量,有时它必须是日期,有时它必须为空(例如,如果该事件尚未发生)
$hora_entrada = $_POST['hora_entrada'];
$salida_comida = $_POST['salida_comida'];
$regreso_comida = $_POST['regreso_comida'];
$hora_salida = $_POST['hora_salida'];
所以,如果POST为空,我将NULL分配给变量:
if ($hora_entrada == '') {$hora_entrada = "NULL";}
if ($salida_comida == '') {$salida_comida = "NULL";}
if ($regreso_comida == '') {$regreso_comida = "NULL";}
if ($hora_salida == '') {$hora_salida = "NULL";}
现在,我想将值插入到mysql表中:
UPDATE `nomina`.`registro_tiempo` SET
`hora_entrada` = '$hora_entrada',
`salida_comida` = '$salida_comida',
`regreso_comida` = '$regreso_comida',
`hora_salida` = '$hora_salida',
WHERE `registro_tiempo`.`id_tiempo` ='$id_tiempo';
") or die (mysql_error());
问题是,当变量为NULL时,记录显示00:00:00,我想保持NULL
我尝试以这两种方式分配NULL但没有成功:
$variable = NULL;
$variable = "NULL";
注意:MySql字段的NULL值为Predetermined。
¿你知道其他任何方法吗?我会帮助你提供帮助
答案 0 :(得分:3)
原因是'NULL'
和NULL
是SQL的两个不同之处。您应该插入'NULL'
(预定的NULL值)时插入NULL
(文字字符串NULL)
UPDATE `nomina`.`registro_tiempo` SET
`hora_entrada` = 'NULL',
`salida_comida` = 'NULL',
`regreso_comida` = 'NULL',
`hora_salida` = 'NULL',
WHERE `registro_tiempo`.`id_tiempo` ='$id_tiempo';
") or die (mysql_error());
应该是
UPDATE `nomina`.`registro_tiempo` SET
`hora_entrada` = NULL,
`salida_comida` = NULL,
`regreso_comida` = NULL,
`hora_salida` = NULL,
WHERE `registro_tiempo`.`id_tiempo` ='$id_tiempo';
") or die (mysql_error());
要做一个简单的修复就是把逻辑用引号括起来,如果它不是NULL:
<?php
$var = $var != "" ? "'" . $var . "'" : "NULL";
$sql = "INSERT INTO MyTable VALUES ('$id', $var)";
?>
请记住要逃避您的内容(特别是如果它是由用户提供的!)请参阅http://php.net/manual/en/security.database.sql-injection.php
修改强>
<?php
// If the variable is not null/empty, wrap quotes around it. Otherwise, store as NULL
$hora_entrada = $_POST['hora_entrada'] != "" ? "'" . $_POST['hora_entrada'] . "'" : "NULL";
$salida_comida = $_POST['salida_comida'] != "" ? "'" . $_POST['salida_comida'] . "'" : "NULL";
$regreso_comida = $_POST['regreso_comida'] != "" ? "'" . $_POST['regreso_comida'] . "'" : "NULL";
$hora_salida = $_POST['hora_salida'] != "" ? "'" . $_POST['hora_salida'] . "'" : "NULL";
// You should also mysqli_real_escape_string them
$hora_entrada = mysqli_real_escape_string($hora_entrada);
$salida_comida = mysqli_real_escape_string($salida_comida);
$regreso_comida = mysqli_real_escape_string($regreso_comida);
$hora_salida = mysqli_real_escape_string($hora_salida);
"UPDATE `nomina`.`registro_tiempo` SET
`hora_entrada` = $hora_entrada,
`salida_comida` = $salida_comida,
`regreso_comida` = $regreso_comida,
`hora_salida` = $hora_salida,
WHERE `registro_tiempo`.`id_tiempo` ='$id_tiempo';
") or die (mysql_error());
?>
答案 1 :(得分:1)
如果您的列设置为允许NULL
值,则当您要插入NULL
时,它不能用引号括起来。
也就是说,您的查询现在看起来像这样:
INSERT INTO `table` (datecol) VALUES('NULL');
但它必须看起来像:
INSERT INTO `table` (datecol) VALUES(NULL);
您可以使用:
$variable = "NULL"; // for null values
// and
$variable = "'2012-07-01'"; // for actual date values
答案 2 :(得分:0)
我假设你使用TIME列数据类型,文档清楚地说明当TIME对象无效时它默认为00:00:00。
http://dev.mysql.com/doc/refman/5.5/en/time.html
您可能希望添加布尔列“validDate”,并在设置NULL日期时将其设置为false。
答案 3 :(得分:0)
$hora_entrada = "'".$_POST['hora_entrada']."'";
$salida_comida = "'".$_POST['salida_comida']."'";
$regreso_comida = "'".$_POST['regreso_comida']."'";
$hora_salida = "'".$_POST['hora_salida']."'";
if ($_POST['hora_entrada'] == '') {$hora_entrada = "NULL";}
if ($_POST['salida_comida'] == '') {$salida_comida = "NULL";}
if ($_POST['regreso_comida'] == '') {$regreso_comida = "NULL";}
if ($_POST['hora_salida'] == '') {$hora_salida = "NULL";}
"UPDATE `nomina`.`registro_tiempo` SET
`hora_entrada` = $hora_entrada,
`salida_comida` = $salida_comida,
`regreso_comida` = $regreso_comida,
`hora_salida` = $hora_salida,
WHERE `registro_tiempo`.`id_tiempo` ='$id_tiempo';
") or die (mysql_error());
答案 4 :(得分:0)
首先检查$ _POST是否已设置,然后指定null
$hora_entrada = $_POST['hora_entrada'];
if (isset($hora_entrada) && empty($hora_entrada)) {
$hora_entrada = null;
}