我有一个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";
?>
是否存在一个函数可以不受限制地将所有文件数据存储在数组中。我的文件大小约为6mb .提前感谢.......我希望你能理解我想要什么……
如果你使用这个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,'"','')
实际上这不是PHP的问题。使用mySQL中的LOAD DATA命令可以很容易地解决这个问题。它看起来像:
LOAD DATA INFILE LOCAL ''var'tmp'test.csv' INTO TABLE sometable FIELD TERMINATED BY ';' LINES TERMINATED BY ''n' (column1, column2);
但是如果你真的想用PHP解决这个问题,那就创建一个SQL文件,在每个CSV行中插入命令,然后用mySQL客户端执行它。