php - 从 php 插入 mysql 将日期字段保存为 00 :00:00 instead of NULL

标签 php mysql date null

我通过 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 值。

¿您知道其他方法吗?我会感谢你的帮助

最佳答案

原因是 '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());
?>

关于php - 从 php 插入 mysql 将日期字段保存为 00 :00:00 instead of NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693823/

相关文章:

php - MySQL 查询将字段设置为 0 而不是空白字符串

php - 如何在 wordpress 中通过父类别 ID 获取子类别?

mysql - .Net 连接字符串无需密码即可连接 MySQL localhost

php - 像google一样的数据库搜索

php - Laravel Eloquent 足球比赛日程中的多重关系

java - 将文件插入 postgres

php - OpenX:停用横幅以显示在区域中

date - SAS:以 YY 格式获取当前年份

javascript - Angular js(1.5)日期过滤器: making it modular

mysql - SQL 查询按月/年统计总条目