【发布时间】:2019-05-04 12:42:25
【问题描述】:
我目前正在尝试将数据从reloads.csv 加载到我的数据库中。
但是 DATETIME 字段被截断。我注意得到正确的日期格式,如answer。
当我加载数据时,我得到了这种错误:
连接成功 537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20 248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33 错误:插入重新加载(滑板车,用户,initialLoad,finalLoad,sourceX,sourceY ,destinationX,destinationY,startTime,endTime)值('248','129','2','4','4.37052','50.86135','4.36254','50.82652','2017-01-01 23 :56:45', '2017-01-02 05:05:33') 键“PRIMARY”的重复条目“2017-01-01” 363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34 错误:插入重新加载(踏板车,用户,initialLoad,finalLoad,sourceX ,sourceY,destinationX,destinationY,startTime,endTime)值('363','17','1','4','4.36902','50.87497','4.3785','50.87691','2017-01- 01 22:00:52','2017-01-02 05:08:34') 键“PRIMARY”的重复条目“2017-01-01” ...
reloads.csv 的结构如下:
scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX,
destinationY, startTime, endTime
537,496,3,4,4.36186,50.86034,4.372,50.86309,2017-01-01T22:05:55,2017-01-02T05:02:20
248,129,2,4,4.37052,50.86135,4.36254,50.82652,2017-01-01T23:56:45,2017-01-02T05:05:33
363,17,1,4,4.36902,50.87497,4.3785,50.87691,2017-01-01T22:00:52,2017-01-02T05:08:34
...
我这样创建了 Reloads 表:
$sql = "CREATE TABLE Reloads (
scooter INT NOT NULL,
user INT NOT NULL,
initialLoad INT,
finalLoad INT,
sourceX FLOAT,
sourceY FLOAT,
destinationX FLOAT,
destinationY FLOAT,
startTime DATETIME NOT NULL,
endTime DATETIME,
PRIMARY KEY (startTime),
FOREIGN KEY (scooter) REFERENCES Scooters(numero),
FOREIGN KEY (user) REFERENCES Rechargeurs(ID)
)";
以下是负载如何重新加载到 Reloads 表中:
//INSERT RELOADS IN DB
if ($fh = fopen("../../data2019/reloads.csv", 'r')) {
$line = fgets($fh);//remove first line
$sql = "";
while (!feof($fh)) {
$line = fgets($fh);
echo "<br>" . $line;
//echo $line;
$str_arr = explode(",", $line);
//print_r($str_arr);
if (count($str_arr) == 10) {
$startTime = str_replace("T", " ",$str_arr[8]);
$endTime = str_replace("T", " ",$str_arr[9]);
$sql = "INSERT INTO Reloads (scooter, user, initialLoad, finalLoad, sourceX, sourceY, destinationX, destinationY,
startTime, endTime)
VALUES (
'$str_arr[0]',
'$str_arr[1]',
'$str_arr[2]',
'$str_arr[3]',
'$str_arr[4]',
'$str_arr[5]',
'$str_arr[6]',
'$str_arr[7]',
'$startTime',
'$endTime'
)";
if ($conn->query($sql) === TRUE) {
//echo "\nNew record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
fclose($fh);
}
我不知道如何调试和解决问题。在我的数据库中,所有日期时间都以这种形式截断:2017-01-01
提前致谢
【问题讨论】:
-
@PaulSpiegel 我刚刚尝试过,但是,我现在以这种形式获得了所有日期时间
YYYY-MM-DD 00:00:00 -
从错误消息中我猜它是
DATE而不是DATETIME。查询对我有用here -
@PaulSpiegel 您的评论帮助我获得了我想要的格式,但所有条目的末尾都有 00:00:00。
-
好吧 - PHP 代码生成了一个正确的 SQL 查询(虽然我不知道为什么最后一列值
'2017-01-02 05:05:33 '的末尾有一个空格)。问题似乎出在数据库上。仔细检查表架构(它真的看起来像DATE)。检查是否为此表定义了任何触发器。