Php 使用“加载数据填充”作为日期格式的多个集合字段

Php 使用“加载数据填充”作为日期格式的多个集合字段,php,mysql,Php,Mysql,我能够使用加载数据填充成功上传我的csv文件。我可以跳过所有不需要的数据/列() 我可以使用SET命令来设置日期格式。我的问题是,如果我有多个日期字段,当我有多个日期字段时,SET命令的任何变体以及上面的组合都不想起作用 <?php if (isset($_POST['load'])) { include '_inc/include.php'; $temp = $_FILES['myfile']['tmp_name']; $sqlstatement="LOAD DATA LOCAL

我能够使用加载数据填充成功上传我的csv文件。我可以跳过所有不需要的数据/列()

我可以使用SET命令来设置日期格式。我的问题是,如果我有多个日期字段,当我有多个日期字段时,SET命令的任何变体以及上面的组合都不想起作用

<?php 

if (isset($_POST['load']))
{
include '_inc/include.php'; 

$temp = $_FILES['myfile']['tmp_name'];
$sqlstatement="LOAD DATA LOCAL INFILE '$temp' INTO TABLE 000_1616 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (id, @somedate, name, anotherdate, color, 1moredate) SET sdate = IF(LENGTH(@somedate)=7,STR_TO_DATE(@somedate,'%m/%d/%Y'),STR_TO_DATE(@somedate,'%m/%d/%y'))";
mysql_query($sqlstatement) or die(mysql_error()); 

echo "It worked";
echo "<p><a href='upload-display.php'>go to page</a></p>";
} 

?>

<form method="post" action="upload.php" enctype="multipart/form-data">
<input name="myfile" type="file" />
<input name="load" type="submit" value="submit" /></form>

我使用@somedate作为第一个日期字段,它实际上是sdate。只要我不尝试使用SET再添加4个日期字段,这就可以很好地工作。我想添加@anotherdate(anotherdate)和@1moredate(1moredate)我必须设置数组吗?我需要在phpMyADMIN一侧的表格中做些什么吗?现在,它们的格式是最新的,但除了第一次提交的日期之外,它们都返回000-00-00

以下是SQL:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `database_track`
--

-- --------------------------------------------------------

--
-- Table structure for table `000_datetest`
--

CREATE TABLE IF NOT EXISTS `000_datetest` (
  `id` int(11) NOT NULL auto_increment,
  `sdate` date default NULL,
  `name` varchar(100) collate utf8_unicode_ci default NULL,
  `anotherdate` date NOT NULL,
  `color` varchar(50) collate utf8_unicode_ci NOT NULL,
  `1moredate` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
csv示例:

+----+---------------+-------------------+---------------------+------------+-------------------+
| id | sdate          | name             | anotherdate     | color        | 1moredate     |
+----+---------------+------------------------+---------------+------------+-------------------+
|  1 | 2011-08-21 | Tom Thumb |    08/16/2010     |   Blue     | 1/5/08            |
+----+---------------+------------------------+---------------+------------+-------------------+
|  1 | 2009-05-12 | Don Duck      |    03/22/2012     |   Yellow   | 9/15/03       |
+----+---------------+------------------------+---------------+------------+-------------------+
1 row in set (0.00 sec)

我希望这会有所帮助,请参阅下面注释中的物理文件。要使用多个SET命令加载数据填充,只需指定SET一次,并用逗号分隔每个变量定义,例如

LOAD DATA INFILE 'my_file' INTO TABLE 'my_table' (column1, @date1, @date2)
SET column2 = STR_TO_DATE(@date1, '%d/%m/%Y %H:%i:%s'),
column3 = STR_TO_DATE(@date2, '%d/%m/%Y %H:%i:%s');

你能提供表格结构-创建表格语句,和CSV文件的例子吗?是的,我不知道如何上传到这里。转到此链接:您可以单独测试表单或下载ZIP或所有文件。它不是CSV文件,而是包含数据的简单文本文件。您应该跳过每个奇数记录,但加载数据填充无法做到这一点。
+----+---------------+-------------------+---------------------+------------+-------------------+
| id | sdate          | name             | anotherdate     | color        | 1moredate     |
+----+---------------+------------------------+---------------+------------+-------------------+
|  1 | 2011-08-21 | Tom Thumb |    08/16/2010     |   Blue     | 1/5/08            |
+----+---------------+------------------------+---------------+------------+-------------------+
|  1 | 2009-05-12 | Don Duck      |    03/22/2012     |   Yellow   | 9/15/03       |
+----+---------------+------------------------+---------------+------------+-------------------+
1 row in set (0.00 sec)
LOAD DATA INFILE 'my_file' INTO TABLE 'my_table' (column1, @date1, @date2)
SET column2 = STR_TO_DATE(@date1, '%d/%m/%Y %H:%i:%s'),
column3 = STR_TO_DATE(@date2, '%d/%m/%Y %H:%i:%s');