我正在尝试将一系列制表符分隔的文本文件读入现有的MySQL表中。我的代码很简单:使用PHP将制表符分隔的文本文件读入到MySQL表中
$lines = file("import/file_to_import.txt");
foreach ($lines as $line_num => $line) {
if($line_num > 1) {
$arr = explode("\t", $line);
$sql = sprintf("INSERT INTO my_table VALUES('%s', '%s', '%s', %s, %s);", trim((string)$arr[0]), trim((string)$arr[1]), trim((string)$arr[2]), trim((string)$arr[3]), trim((string)$arr[4]));
mysql_query($sql, $database) or die(mysql_error());
}
}
但无论我做什么(因此sprintf的语句中的每个变量之前铸造)我收到了“您的SQL语法错误;检查手册,该手册对应于您的MySQL服务器版本,以便在“在第1行”附近使用正确的语法。
我将代码回显出来,粘贴到MySQL编辑器中,运行良好,它不会从PHP脚本执行。
我在做什么错?
硅
更新:这里是echoe'd SQL的:
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A1', 'GBEN', '2.50-2.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A2', 'GBEN', '3.00-3.49m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A3', 'GBEN', '3.50-3.99m')
INSERT INTO wheelbase (WheelBaseCode, LanguageCode, WheelBaseDescription) VALUES ('A4', 'GBEN', '4.00-4.49m')
有趣的是,我现在把它创建表中的行的正确数目,但值它插入空。 ..
这可能是源文本文件中的编码问题?
我知道我并不需要弦乐演员,这是为了确保我不会生气。你的代码应该和我一样工作,但它不会。我不需要指定字段名称,因为我插入到所有五个字段中(所以我可以将INSERT INTO插入到my_table VALUES中)。另外,最后两个是DOUBLE类型,而不是VARCHAR。数据中没有引号,即使我只处理前几行,仍然会出现错误。 – 2010-04-30 15:43:02
那么,在运行它们之前,请回显查询。将它们添加到您的问题。 – 2010-04-30 15:47:32
使用SQL更新了帖子 – 2010-04-30 16:14:08