在php中保存mysql数据库中的文件数据

时间:2011-08-13 08:32:03

标签: php mysql csv

我有一个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。谢谢你提前.......我希望你明白我想要的...提前谢谢。

2 个答案:

答案 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客户端执行它。