我有以下代码。我正在尝试使用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 ~
答案 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 :)