Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php的mysql查询中正确使用NULL_Php_Mysql_Null - Fatal编程技术网

在php的mysql查询中正确使用NULL

在php的mysql查询中正确使用NULL,php,mysql,null,Php,Mysql,Null,相关的MySQL数据库表: $ETA_time = strtotime($arrivals[$i]["operationalTimes"]["estimatedGateArrival"]["dateLocal"]); if (!$ETA_time) { $ETA = 'NULL'; } else { $ETA = strftime("%Y-%m-%d %H:%M:%S", $ETA_time); } $STA_time = strtotime($arrivals[$i][

相关的MySQL数据库表:

$ETA_time =  strtotime($arrivals[$i]["operationalTimes"]["estimatedGateArrival"]["dateLocal"]);
if (!$ETA_time) {
    $ETA = 'NULL';
} else {
    $ETA = strftime("%Y-%m-%d %H:%M:%S", $ETA_time);
}

$STA_time   = strtotime($arrivals[$i]["operationalTimes"]["scheduledGateArrival"]["dateLocal"]);
if (!$STA_time) {
    $STA = 'NULL';
} else {
    $STA = strftime("%Y-%m-%d %H:%M:%S", $STA_time);
}

$ATA_time = strtotime($arrivals[$i]["operationalTimes"]["actualGateArrival"]["dateLocal"]);
if (!$ATA_time) {
    $ATA = 'NULL';
} else {
    $ATA = strftime("%Y-%m-%d %H:%M:%S", $ATA_time);
}

$query="INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`)
            VALUES('".$ETA."','".$STA."','".$ATA."');";
$result=run_query($query);
查询变量转储:

CREATE TABLE `Schedule` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `STA` datetime DEFAULT NULL,
  `ETA` datetime DEFAULT NULL,
  `ATA` datetime DEFAULT NULL,
);
错误消息是:

INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`) VALUES('2013-08-28 12:30:00','NULL','NULL');
NULL是一个特定值,不是字符串文字。它应该直接传递给查询,即

Incorrect datetime value: 'NULL' for column 'STA' at row 1
这意味着您的PHP代码应该处理该问题,而不是将NULL-s括起来:

INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`)
    VALUES ('2013-08-28 12:30:00', NULL, NULL);


出现该错误消息的原因是,您正在传递一个NULL字符串,该字符串无法在datetime数据类型中转换为datetime格式

如果希望列STA和ATA的值为NULL,请传递不带单引号的NULL值。值周围的单引号使其成为文字字符串

$formatTime = $operationalLocalDate(
    $arrivals
    $timeFormatAndNull("'%Y-%m-%d %H:%M:%S'")
);

$query = sprintf(
    "INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`) VALUES (%s, %s, %s);"
    , $formatTime($i, "estimatedGateArrival")
    , $formatTime($i, "scheduledGateArrival")
    , $formatTime($i, "actualGateArrival")
);
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用PreparedStatements,可以避免在值周围使用单引号


NULL是关键字,不是字符串,不应单引号引用。值'2013-08-28 12:30:00',NULL,NULL;因为将NULL作为字符串传递不是NULL,所以传递空字符串或关键字itself引用advice每个SQL错误都有一个数字。如果不是两个号码,你的错误号码是多少?您不清楚您发布的错误消息的哪一部分?可能与-v@harke-谢谢你的精彩编辑。老实说,我为你的编辑感到羞耻。事实上,正如问题所述,NULL也是默认值,所以在我看来,更正确的方法是根本不通过插入的NULL值,因为它们不需要。我无法想象这是否决票的原因。但这需要一种不同的方法来创建SQL查询。
$formatTime = $operationalLocalDate(
    $arrivals
    $timeFormatAndNull("'%Y-%m-%d %H:%M:%S'")
);

$query = sprintf(
    "INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`) VALUES (%s, %s, %s);"
    , $formatTime($i, "estimatedGateArrival")
    , $formatTime($i, "scheduledGateArrival")
    , $formatTime($i, "actualGateArrival")
);
INSERT INTO `Schedule` (ETA, STA, ATA) 
VALUES ('2013-08-28 12:30:00', NULL, NULL)