我有一个csv文件包含118350行,我想保存我的数据库表中的每一行,我已读取数组中的整个文件并解析每一行进行一些修改,我已经开始在我的数据库中保存文件内容,我有一个PHP程序,但问题是一次只保存927行所以我必须一次又一次地运行我的PHP脚本以保存数据库中的其他数据。
我的PHP代码是---
<?php
$connection = mysql_connect('localhost', 'user', 'password') or die(mysql_error($connection));
$select_db = mysql_select_db('dbname', $connection) or die(mysql_error($connection));
$file = file('ip-to-country.csv');
$data = str_replace("\"", "", $file, $j); //for removing ' " ' charactor from string
$i = 0;
for ($i = 0; $i < count($data); $i++) {
$content = explode(',', $data[$i]);
$ins = "insert into iplocation (startiprang,endiprang,concode,concode3,country) values ($content[0],$content[1],'$content[2]','$content[3]','$content[4]')";
$result = mysql_query($ins, $connection);
}
echo "done";
?>
是否有任何函数可以无限制地将所有文件数据存储在数组中。 myfile大小约为6 MB。谢谢你提前.......我希望你明白我想要的...提前谢谢。
答案 0 :(得分:1)
如果你正在使用这个csv
http://ip-to-country.webhosting.info/node/view/6
你可以这样做:
create table iplocation (
id int not null auto_increment primary key,
startiprang int unsigned,
endiprang int unsigned,
concode varchar(50),
concode3 varchar(50),
country varchar(150)
) engine = myisam;
load data infile 'c:/ip-to-country.csv'
into table iplocation
fields terminated by ',"'
(@startiprang,@endiprang,@concode,@concode3,@country)
set
startiprang = replace(@startiprang,'"',''),
endiprang = replace(@endiprang,'"',''),
concode = replace(@concode,'"',''),
concode3 = replace(@concode3,'"',''),
country = replace(@country,'"','')
答案 1 :(得分:0)
实际上这不是PHP问题。在mySQL中使用LOAD DATA command可以很容易地解决它。它看起来像是:
LOAD DATA INFILE LOCAL '\var\tmp\test.csv' INTO TABLE sometable FIELD TERMINATED BY ';' LINES TERMINATED BY '\n' (column1, column2);
但如果您真的想用PHP解决它,那么只需为每个CSV行创建带有INSERT命令的SQL文件,然后使用mySQL客户端执行它。