fgetcsv 可以读取fopen打开的文件,并读取一行,
这样可以防止文件太大而内存溢出
然后每读取一定行数,入库一次,
思路:
读取csv文件,每读取一行数据,就插入数据库
示例
文件夹结构
/
file.csv?//csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库操作)
index.php?//php文件
file.csv
index.php
/**
*?读取csv文件,每读取一行数据,就插入数据库
*/
//获取数据库实例
$user?=?'root';
$password?=?'';
try?{
$db?=?new?PDO($dsn,?$user,?$password);
}?catch?(PDOException?$e)?{
echo?'Connection?failed:?'?.?$e-getMessage();
}
//读取file.csv文件
if?(($handle?=?fopen("file.csv",?"r"))?!==?FALSE)?{
while?(($row?=?fgetcsv($handle,?1000,?","))?!==?FALSE)?{
//写入数据库
$sth?=?$db-prepare('insert?into?test?set?name=:name,age=:age');
$sth-bindParam(':age',$row[1],PDO::PARAM_INT);
$sth-execute();
fclose($handle);
数据表
CREATE?TABLE?+test+?(
+id+?INT(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
+age+?INT(10)?NULL?DEFAULT?'0',
PRIMARY?KEY?(+id+)
)
ENGINE=InnoDB;
运行结束后,数据库中会插入csv中的三行数据
php导入CSV文件:
$line_number = 0;
$handle = fopen("1.xls","r");
while ($data = fgetcsv ($handle, 100000, ",")) {
if($line_number == 0){
$line_number++;
continue;
//z这样就可以去掉表头的那一行
for ($i = 0; $i count($data); $i++) {
$ziduan = $data[$i];
header( "Cache-Control: public" );
header( "Pragma: public" );
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=txxx.csv");
header('Content-Type:APPLICATION/OCTET-STREAM');
ob_start();
$file_str="";
$mysqli= new mysqli('localhost','root','','test');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
$sql='select * ?from messages';
$result=$mysqli-query($sql);
if($result){
while ($row = mysqli_fetch_assoc($result)){
$file_str.= $row['id'].','.$row['title'].','.$row['name'].','."'{$row['telephone']}'".','.$row['qq'].','.$row['email'].','.str_ireplace(',',',',$row['content']).','.$row['retime']."\n";
}else{
echo "nonono!!!";
ob_end_clean();
echo $header_str;
echo $file_str;
php
$data=file("data.csv");
$j=count($data);
$val="'".str_replace(",","','",trim($data[$i]))."'";
$sql="insert?into?tab?values(".$val.")";
mysql_query($sql,$mylink);
//最简单的形式]
//我不了解csv?现在给你改下
$fp=fopen("a.csv","r");
while(!?feof($fp)){
$data=fgetcsv($fp);
if(!is_array($data))
$sql=$p="";
foreach($data?as?$val){
$sql.=$p."'".$val."'";
$p=",";
$sql="insert?into?tab?values(".$sql.")";
echo?$sql;
//mysql_query($sql,$mylink);
fclose($fp);
以上就是土嘎嘎小编为大家整理的csv文件做php数据库相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!