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 表的高效方法