2011-10-31 48 views
0

我将如何去使用PHP代码从csv文件中的信息填充数据库?我需要使用PHP进行数据库调用的做法,但在那一刻,我所有访问是这样的csv文件...从csv文件使用php填充数据库

+1

['LOAD DATE INFILE'](http://dev.mysql.com/doc/refman/5.0/en/load-data.html)使用MySQL? –

+1

fgetcsv()是一个好开始 – 2011-10-31 01:31:51

回答

0

使用内置的PHP函数读取CSV并写入输出文件。然后你可以将SQL导入你的数据库。这应该适用于任何类型的数据库。

不要忘记逃避你正在使用的任何字符串。在这个例子中我使用了sqlite_escape_string()来达到这个目的。

$fd = fopen("mydata.csv", "r"); 
$fdout = fopen("importscript.sql","w"); 

while(!feof($fd)) 
{ 
    $line = fgetcsv($fd, 1024); // Read a line of CSV 

    fwrite($fdout,'INSERT INTO mytable (id,name)' 
       .'VALUES ('.intval($line[0]).",'".sqlite_escape_string($line[1])."');\r\n"; 
} 

fclose($fdout); 
fclose($fd); 
+0

你能解释一下sqlite函数的作用吗?我做了一个关于它的搜索,但我仍然不完全确定...以及线路[0]和线路[1]上的内容是什么? – user1015214

+0

sqlite_escape_string会对您的字符串进行清理,因此如果它包含引号,它就不会破坏您的查询。 –

+0

$ line [0]和$ line [1]从CSV行中提取第一个和第二个单元格。 –

1

设计注意事项: 你可能不希望使用的file_get_contents一样的功能,一次将整个文件加载到内存中。对于大文件,这将消耗所有可用内存并导致问题。相反,像亚当所说的那样,一次只读一行。

fgetcsv at php manual

//Here's how you would start your database connection 
mysql_connect($serverName, $username, $password); 
mysql_select_db('yourDBName'); 

//open the file as read-only 
$file = fopen("file.csv", "r"); 

// lineLength is unlimited when set to 0 
// comma delimited 
while($data = fgetcsv($file, $lineLength = 0, $delimiter = ",")) { 
    //You should sanitize your inputs first, using a function like addslashes 
    $success = mysql_query("INSERT INTO fileTable VALUES(".$data[0].",".$data[1].")"); 
    if(!$success) { 
    throw new Exception('failed to insert!'); 
    } 
}