5

POSTを介して次の変数を受け取ります。日付である場合もあれば、nullである場合もあります(たとえば、そのイベントがまだ発生していない場合)。

$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のままにしておきたいことです。

私はこの2つの方法でNULLを割り当てようとしましたが、成功しませんでした。

$variable = NULL;

$variable = "NULL";

注:MySqlフィールドには、事前に決定されたNULL値があります。

¿これを行う他の方法を知っていますか?私はあなたの助けに感謝します

4

5 に答える 5

3

その理由は、 SQL'NULL'とは異なる2つのことです。NULL挿入'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());
?>
于 2012-07-27T18:47:27.973 に答える
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
于 2012-07-27T18:48:00.850 に答える
0

TIME列のデータ型を使用していると仮定します。ドキュメントには、TIMEオブジェクトが無効な場合、デフォルトで00:00:00になると明記されています。

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

ブール列「validDate」を追加し、NULL日付が設定されている場合はfalseに設定することをお勧めします。

于 2012-07-27T18:50:03.667 に答える
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());
于 2012-07-27T18:50:08.100 に答える
0

最初に$_POSTが設定されていることを確認してから、nullを割り当てます

$hora_entrada = $_POST['hora_entrada'];    
if (isset($hora_entrada) && empty($hora_entrada)) {
    $hora_entrada = null;
}
于 2012-07-27T18:51:43.447 に答える