LOAD DATA INFILE / PHP MySQLi /为输入的&添加额外的列/值处理NULL值

时间:2012-01-15 20:49:39

标签: php mysqli innodb load-data-infile

我一直在试验LOAD DATA INFILE,我希望能够做一些事情。我不确定它们是否可行,或者我是否需要为上传创建临时表。

在我的应用程序中上传/输入CSV文件时,我想为这些行设置一个自动递增列。另外,我想为每行添加一个列值,用于标识上传文件的用户。

我在InnoDB数据库上使用PHP / MySQLi。

我的CSV文件中的空值可能还有空字符串。有没有一种简单的方法可以将这些值作为NULL输入到数据库中?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

要实现您想要的功能,您需要在将数据加载到表之前先以编程方式预先创建表以及触发器函数。

因此,首先使用触发器创建表:

示例:

 CREATE TABLE foo (
    id INT NOT NULL AUTO_INCREMENT,
    fooitems TEXT,
    PRIMARY KEY (id)
 );

 CREATE TRIGGER fooblank2null
 BEFORE INSERT ON foo
 FOR EACH ROW
 SET NEW.fooitems=IF(TRIM(NEW.fooitems)='',NULL,NEW.fooitems);

测试触发器是否有效:

 INSERT INTO foo (fooitems)
 VALUES
 ('i'),(''),('am'),('foo'),(' '),('.');

您现在可以将数据加载到特定列。

示例:

 LOAD DATA
 INFILE 'foo.txt'
 INTO TABLE foo
 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
 LINES TERMINATED BY '\n'
 (fooitems);