yen*_*sen 5 php mysql null date
我通过POST收到以下变量,有时它必须是日期,有时必须为null(例如,如果该事件尚未发生)
$hora_entrada = $_POST['hora_entrada'];
$salida_comida = $_POST['salida_comida'];
$regreso_comida = $_POST['regreso_comida'];
$hora_salida = $_POST['hora_salida'];
Run Code Online (Sandbox Code Playgroud)
因此,如果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";}
Run Code Online (Sandbox Code Playgroud)
现在,我想将值插入到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());
Run Code Online (Sandbox Code Playgroud)
问题是当变量为NULL时记录显示为00:00:00,而我想将其保留为NULL
我尝试通过以下两种方式分配NULL,但未成功:
$variable = NULL;
$variable = "NULL";
Run Code Online (Sandbox Code Playgroud)
注意: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());
Run Code Online (Sandbox Code Playgroud)
它应该是
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());
Run Code Online (Sandbox Code Playgroud)
一个简单的修复方法是,如果内容不为 NULL,则将逻辑用引号括起来:
<?php
$var = $var != "" ? "'" . $var . "'" : "NULL";
$sql = "INSERT INTO MyTable VALUES ('$id', $var)";
?>
Run Code Online (Sandbox Code Playgroud)
并记住转义您的内容(尤其是由用户提供的内容!) 请参阅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());
?>
Run Code Online (Sandbox Code Playgroud)