2011-08-13 45 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