从文本文件

时间:2015-07-13 00:32:15

标签: php mysql import text-files

我有以下代码。我正在尝试使用php导入一个文本文件到sql表,正如本网站上的一个用户所建议的那样。

不幸的是,由于我的文本文件有" Max和Min"文件中的单词。

我试图找出我能做些什么来避免它。我发现的大部分内容都是关于在列名中使用保留字。但我的不是列名作为数据插入列中的列名。

这可以避免,因为我不知道文本文件中还有多少其他保留字,我需要每天自动运行代码。我不能每次都流产。这是一个巨大的文本文件,所以我不能每次都手动替换关键字。

mysqli_query("CREATE TABLE IF NOT EXISTS `add_feature_id` (
`id_f` INT(10) unsigned NOT NULL AUTO_INCREMENT,
`id_product` INT(10) unsigned NOT NULL,
`id_feature` INT(10) unsigned NOT NULL, 
`value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
DEFAULT   NULL,PRIMARY KEY ( `id_f` ) )",$conn);

$fd = fopen('trial.txt', 'r');
$fheader = fgets($fd); 

while (($data = fgetcsv($fd,0, "~")) !== FALSE) {
$id_product = $data[0];
$id_feature = $data[1];
$unitval = $data[2];
$value = mysql_real_escape_string($unitval);

mysqli_query("INSERT INTO   `add_feature_id`(`id_product`,`id_feature`,`value`) 
VALUES ($id_product,$id_feature,'$value')",$conn) or die(mysql_error());
}

fclose($fd);

$result = mysqli_query("SELECT * FROM `add_feature_id`",$conn);
//I print my result here but i get error while insert is executed

我得到的错误是

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'附近使用。 最高和最低要求

入门级要求低 Minimu'在第2行

这是我的文本文件中出现错误最高和最低要求的部分,如下面的文本文件所示

IMSKU~AttributeID~Value~Unit~StoredValue~StoredUnit(header row)

1006854 ~ 16257 ~Licensing Program: Max and Min Requirements<ul><li>Low entry level  requirement</li><li>Minimum 1 server (Band S) OR 5 desktop (Band A)</li></ul> ~  ~ 0.00 ~

2 个答案:

答案 0 :(得分:2)

您在第32325行收到了无效数据:

1062708~16257~Express Licensing Program:<ul><li>Targeted at small - medium companies (1-500 units)</li><li>Minimum purchase requirements for licenses</li><li>Includes all Symantec software products</li><li> Certificated-based program - requires no legal review</li><li>Band identified via number of units per transaction</li></ul>
<br />Max and Min Requirements<ul><li>Low entry level requirement</li><li>Minimum 1 server (S-Band) OR 5 desktop (A-H Band)</li></ul>~~0.00~
1062708~16260~2~~0.00~

那条中间线。

失败的原因是因为$id_product$id_feature不是单引号/转义。

您应该做的是准备/执行此操作(或删除无效数据)。

答案 1 :(得分:1)

如何使用以下命令封装字符串:

LOAD DATA INFILE '/tmp/trial.txt' 
INTO TABLE add_feature_id  
    FIELDS TERMINATED BY ',' 
           OPTIONALLY ENCLOSED BY '"'
    LINES  TERMINATED BY '\n' -- or \r\n

https://dev.mysql.com/doc/refman/5.1/en/load-data.html

编辑:

create table fred
(
fullName varchar(255) not null,
age int not null
);

fred2.txt:

"jason"~50
"fred max min max smith"~87
"jason avg abs sum smith"~12


load data infile 'c:\\dev\\fred2.txt'
into table fred
fields terminated by '~'
optionally enclosed by '"'
lines terminated by '\r\n'

select * from fred

yep they came in :)