我正在尝试将一系列制表符分隔的文本文件读入现有的 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 脚本执行。
我做错了什么??
硅
更新:以下是回显的 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')
有趣的是,我现在让它在表中创建了正确的行数,但它插入的值是空的...
这可能是源文本文件中的编码问题??
最佳答案
您不需要字符串转换,数据已经是字符串。
确保文件数据中没有引号。在运行之前回显 sql 字符串,看看是否有明显的错误。
将 SQL 更改为:
"INSERT INTO my_table (`field1Name`, `field2Name`, `field3Name`, `field4Name`, `field5Name`) VALUES('%s', '%s', '%s', '%s', '%s');"
此更改包括字段名称,并引用最后两个值。
关于php - 使用 PHP 将制表符分隔的文本文件读入 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745637/