我有以下代码.我正在尝试使用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,"~")) !== 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 ~
解决方法
您在第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不是单引号/转义.
你应该做的是准备/执行这个(或摆脱那些无效的数据).