$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);
相关的MySQL数据库表:
CREATE TABLE `Schedule` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`STA` datetime DEFAULT NULL,
`ETA` datetime DEFAULT NULL,
`ATA` datetime DEFAULT NULL,
);
查询var_dump:
INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`) VALUES('2013-08-28 12:30:00','NULL','NULL');
错误消息是:
Incorrect datetime value: 'NULL' for column 'STA' at row 1
答案 0 :(得分:2)
NULL
是一个特定值,而不是字符串文字。它应该直接传递给查询,即
INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`)
VALUES ('2013-08-28 12:30:00', NULL, NULL);
这意味着您的PHP代码应该处理它而不包含NULL-s:
$timeFormatAndNull = function ($format) {
return function($time) use ($format) {
$time = strtotime($time);
return $time ? strftime($format, $time) : 'NULL';
};
};
$operationalLocalDate = function($arrivals, $callback) {
return function($i, $date) use ($arrivals, $callback) {
return $callback(
$arrivals[$i]["operationalTimes"][$date]["dateLocal"])
);
};
};
和
$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")
);
答案 1 :(得分:2)
出现此错误消息的原因是因为您在<<1>}(无法转换为日期时间格式)中传递字符串 < strong> datetime 数据类型。
当您希望列NULL
和STA
的值为ATA
时,请传递NULL
值而不使用单引号。值周围的单引号使其成为文字字符串。
NULL
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用INSERT INTO `Schedule` (ETA, STA, ATA)
VALUES ('2013-08-28 12:30:00', NULL, NULL)
,您可以摆脱在值周围使用单引号。