2011-08-13 104 views
0

我有一个csv文件包含118350行,我想保存每行在我的数据库表中,我已经读取数组中的整个文件和解析每一行的一些修改,我已经开始要保存我的数据库中的文件内容,我有一个PHP程序,但问题是,一次只保存927行,所以我必须一次又一次地运行我的PHP脚本,以保存数据库中的进一步数据。保存mysql数据库中的文件数据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。 thankx提前.......我希望你明白我想要什么...在此先感谢。

+1

看看MySQL的负荷数据的语法。它更快更轻松。如果您发布了csv的示例(少数几行),并且可能会显示show create table iplocation的输出,我会为您写出正确的语法。 –

回答

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来解决它,然后刚刚创建SQL文件,在其中插入命令每个CSV行与MySQL客户端执行它。

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,'"','') 
+0

你忘了关于本地关键字吗? – WASD42

+0

我不知道这是比赛。他可以很容易地适应他的需求。我在将代码发布到自己的计算机上之前对其进行了测试:) –

+0

只有当您在同一台机器上运行mySQL服务器和客户端时,才能使用:] – WASD42