Php 尽管格式正确,MySQL字段DATETIME仍会截断

Php 尽管格式正确,MySQL字段DATETIME仍会截断,php,mysql,datetime,xampp,Php,Mysql,Datetime,Xampp,我目前正试图将数据从relloads.csv加载到我的数据库中。 但是DATETIME字段会被截断。我注意得到了正确的日期格式,如下所示 加载数据时,会出现以下错误: 成功连接 537496,3,4,4.36186,50.86034,4.372,50.86309217-01-01T22:05:552017-01-02T05:02:20 248129,2,4,4.37052,50.86135,4.36254,50.826522017-01-01T23:56:452017-01-02T05:05:3

我目前正试图将数据从relloads.csv加载到我的数据库中。 但是DATETIME字段会被截断。我注意得到了正确的日期格式,如下所示

加载数据时,会出现以下错误:

成功连接 537496,3,4,4.36186,50.86034,4.372,50.86309217-01-01T22:05:552017-01-02T05:02:20 248129,2,4,4.37052,50.86135,4.36254,50.826522017-01-01T23:56:452017-01-02T05:05:33错误:插入到重新加载指示器中,用户,初始加载,最终加载,源x,源y,目标x,目标,起始时间,结束时间值“248”,“129”,“2”,“4”,“4.37052”,“50.86135”,“4.36254”,“50.82652”,“2017-01-01 23:56:45”,“2017-01-05:33” 钥匙“主要”的重复条目“2017-01-01” 363,17,1,4,4.36902,50.87497,4.3785,50.876912017-01-01T22:00:522017-01-02T05:08:34错误:插入到重新加载滑板车中,用户,初始加载,最终加载,源x,源y,目标x,目标,开始时间,结束时间值'363','17','1','4','4.36902','50.87497','4.3785','50.87691','2017-01-01 22:00:52','2017-01-05:34 钥匙“主要”的重复条目“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
...
我创建了如下重新加载表:

$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)
)";
以下是加载如何重新加载到重新加载表中:

//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中,所有日期时间均以这种形式截断

提前感谢

根据您的数据,您可以使用substr和STRPO仅获取Y-m-d格式的日期

$startTime = '2017-01-01T22:05:55';
$endTime   = '2017-01-02T05:08:34';
$startTime = substr($startTime,0,strpos($startTime, 'T'));
$endTime   = substr($endTime,0,strpos($endTime, 'T'));
您可以使用DateTime进行Y-m-d H:i:s


@Paul Spiegel我刚试过,但是,我现在从错误消息中得到了这个表单中的所有日期时间YYYY-MM-DD 00:00:00,我猜它是日期而不是日期时间。查询适用于我@PaulSpiegel您的评论帮助我获得了我想要的格式,但所有条目的末尾都有00:00:00。好吧-PHP代码生成了正确的SQL查询,尽管我不知道为什么最后一列值“2017-01-02 05:05:33”的末尾有空格。问题似乎出在数据库上。仔细检查表模式,它看起来确实像日期。检查是否为此表定义了任何触发器。我需要完整的格式,以便在同一天发生两次加载时不会得到重复的主键。@Dixel您是指像这样的2017-01-01 22:05:55吗?
$startTime  = '2017-01-01T22:05:55';
$dateObject = new DateTime($startTime);
$startTime  = $dateObject->format('Y-m-d H:i:s');

$endTime   = '2017-01-02T05:08:34';
$dateObject = new DateTime($endTime);
$endTime  = $dateObject->format('Y-m-d H:i:s');