2012-07-27 73 views
4

我通过POST接收以下变量,有时它必须是日期,有时它必须为空(例如,如果该事件没有发生尚)从php中插入mysql保存日期字段为00:00:00而不是NULL

$hora_entrada = $_POST['hora_entrada']; 
$salida_comida = $_POST['salida_comida']; 
$regreso_comida = $_POST['regreso_comida']; 
$hora_salida = $_POST['hora_salida']; 

所以,我分配到NULL变量如果POST是空的:

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()); 

的问题是,当变量为空的记录说00:00:00我想保留它NULL

我试图在这两种方法分配NULL没有成功:

$variable = NULL; 

$variable = "NULL"; 

注意:MySql字段具有预定义的NULL值。

¿您是否知道有其他方法可以做到这一点?我会帮助你的

+0

秀'DESC“registro_tiempo''请。 – Peon 2012-07-27 18:44:13

+2

我很确定“NULL”引号是做什么的。但是你应该*真的*,*真的*,**真的**读了SQL注入攻击! – 2012-07-27 18:46:42

+0

时间列=“NULL”=> '00:00:00' – 2012-07-27 18:48:00

回答

2

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

记住逃避你的内容(尤其是如果它是由日提供!E用户)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()); 
?> 
+0

是的,我明白了。问题是我想插入一个变量的值。 'salida_comida' ='$ variable',返回00:00:00 'salida_comida' = $变量,返回“您的SQL语法中有错误;等等......” – yenssen 2012-07-27 18:52:53

+0

好吧,给我一些源代码 – justderb 2012-07-27 18:53:50

+0

完成。看看是否有帮助 – justderb 2012-07-27 18:56:30

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 
0

我想你使用TIME列数据类型时,文档明确指出,当TIME对象无效时,它默认为00:00:00。

http://dev.mysql.com/doc/refman/5.5/en/time.html

你可能想添加一个布尔值列“validDate”,当NULL日期设置其设置为false。

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()); 
+0

在php中追加字符串,你可以使用'.'而不是'+' – justderb 2012-07-27 19:01:25

+0

@justderb对不起,这是一个快速的.. – 2012-07-27 19:05:46

0

首先检查$ _ POST设置,然后分配空

$hora_entrada = $_POST['hora_entrada'];  
if (isset($hora_entrada) && empty($hora_entrada)) { 
    $hora_entrada = null; 
}