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中的三行数据
进入docker的mysql容器.
进入容器导出数据,首先执行dockerps,找到mysql容器的name,然后执行dockerexec-itmysql/bin/bash,进入容器,执行命令whereismysql,找到mysql的运行路径,我这里是:/usr/local/mysql/bin,用cd进入cd/usr/local/mysql/bin.请注意,这里的路径是指docker容器内的路径,跟您的宿主机路径没有关系,执行导出命令mysqldump-u用户名-p数据库名保存文件.sql,输入密码后基本导出成功,请注意,保存文件的路径要设置在volumes下面,即/var/lib/mysql/下,随后输入exit退出容器内部,回到宿主机上,我们就能够找到导出的数据文件了,如果您要导出csv格式的话,将mysqldump的那句命令改为:mysql-u用户名--password=密码--database=数据库名--execute='SELECT+FIELD+,+FIELD+FROM+TABLE+LIMIT0,10000'-X保存文件.sql即可.
以上就是土嘎嘎小编为大家整理的php导入csv到数据库相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!