php 利用PHP将CSV文件导入到源码中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 利用PHP将CSV文件导入到源码中相关的知识,希望对你有一定的参考价值。

<?php
function import_csv_to_sqlite(&$pdo, $csv_path, $options = array())
{
	extract($options);
	
	if (($csv_handle = fopen($csv_path, "r")) === FALSE)
		throw new Exception('Cannot open CSV file');
		
	if(!$delimiter)
		$delimiter = ',';
		
	if(!$table)
		$table = preg_replace("/[^A-Z0-9]/i", '', basename($csv_path));
	
	if(!$fields){
		$fields = array_map(function ($field){
			return strtolower(preg_replace("/[^A-Z0-9]/i", '', $field));
		}, fgetcsv($csv_handle, 0, $delimiter));
	}
	
	$create_fields_str = join(', ', array_map(function ($field){
		return "$field TEXT NULL";
	}, $fields));
	
	$pdo->beginTransaction();
	
	$create_table_sql = "CREATE TABLE IF NOT EXISTS $table ($create_fields_str)";
	$pdo->exec($create_table_sql);

	$insert_fields_str = join(', ', $fields);
	$insert_values_str = join(', ', array_fill(0, count($fields),  '?'));
	$insert_sql = "INSERT INTO $table ($insert_fields_str) VALUES ($insert_values_str)";
	$insert_sth = $pdo->prepare($insert_sql);
	
	$inserted_rows = 0;
	while (($data = fgetcsv($csv_handle, 0, $delimiter)) !== FALSE) {
		$insert_sth->execute($data);
		$inserted_rows++;
	}
	
	$pdo->commit();
	
	fclose($csv_handle);
	
	return array(
			'table' => $table,
			'fields' => $fields,
			'insert' => $insert_sth,
			'inserted_rows' => $inserted_rows
		);

}

/**
 * demo
 * #!./php
 * <?php
 * include 'import_csv_to_sqlite.php';
 * 
 * $dbh = new PDO('sqlite:./test.sqlite');
 * $options = array("table"=>"t_testcsv");
 * $res = import_csv_to_sqlite($dbh, "data.csv", $options);
 * var_dump($res);
 *
 * ?>
 * /

以上是关于php 利用PHP将CSV文件导入到源码中的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 将 csv 导入数据库数据太长

php中如何导入导出CSV格式的文件

我的 php 代码只是将我的 csv 文件的第一行导入数据库

PHP:CSV 导入 MYSQL 总是少于 CSV 文件中的实际行数?

如何使用 PHP CodeIgniter 将 CSV 数据导入 MYSQL 数据库?

需要通过 PHP 将大型 CSV 文件导入多个 MySQL 表的高效方法