用PHP/MySQL上传CSV
我已经试着把一个csv文件上传到我的数据库里一个星期了,我已经读了无数的教程,不知道我做错了什么,这是一个简单的代码,我太愚蠢了,无法正确理解。任何帮助都是金色的!:)用PHP/MySQL上传CSV,php,html,mysql,csv,Php,Html,Mysql,Csv,我已经试着把一个csv文件上传到我的数据库里一个星期了,我已经读了无数的教程,不知道我做错了什么,这是一个简单的代码,我太愚蠢了,无法正确理解。任何帮助都是金色的!:) if(isset($\u文件['file'])){ $csv_文件=$_文件['file']['name']; $sql=当我必须将CSV导入数据库表时,我总是编写自己的CSV解析器/导入器。它非常简单 这里有一个例子 test.csv Firstname,Lastname,Age "Latheesan","Kanes",26
if(isset($\u文件['file'])){
$csv_文件=$_文件['file']['name'];
$sql=当我必须将CSV导入数据库表时,我总是编写自己的CSV解析器/导入器。它非常简单
这里有一个例子
test.csv
Firstname,Lastname,Age
"Latheesan","Kanes",26
"Adam","Smith",30
test.php
<?php
// Mini Config
$csv_file = 'test.csv';
$delimiter = ',';
$enclosure = '"';
$skip_first_row = true;
$import_chunk = 250;
// Parse CSV & Build Import Query
$import_queries = array();
$first_row_skipped = false;
if (($handle = fopen($csv_file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
if ($skip_first_row && !$first_row_skipped) {
$first_row_skipped = true;
continue;
}
list($firstname, $lastname, $age) = $data;
$import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
}
fclose($handle);
}
// Proceed if any data got parsed
if (sizeof($import_queries))
{
foreach(array_chunk($import_queries, $import_chunk) as $queries)
{
$dbh->query(implode(' ', $queries));
}
}
?>
对于实际导入数据库,您有两个选项:
构建一个导入sql查询集合并在批处理(数组块)中执行它-这意味着对数据库的查询更少。但是,正如您所看到的,我没有检查CSV中的值-也就是说,我信任我的数据源,没有转义任何内容-有点危险
一旦使用转义值构建查询,您就可以执行该查询-一个小缺点是它将在csv中每行执行一个查询
希望这有帮助。您是否尝试过通过SQL控制台而不是通过PHP运行相同的查询?然后您可以确定这是您的代码问题还是您的查询问题。您的csv结构是什么样子的?您的db表是什么样子的?@JamesBaker刚刚告诉我访问被拒绝。这是我对用户ca的blummin读写访问权限吗“使用我”问题?可能是,也可能是您正在使用的SQL用户的用户权限。
<?php
// Mini Config
$csv_file = 'test.csv';
$delimiter = ',';
$enclosure = '"';
$skip_first_row = true;
$import_chunk = 250;
// Parse CSV & Build Import Query
$import_queries = array();
$first_row_skipped = false;
if (($handle = fopen($csv_file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
if ($skip_first_row && !$first_row_skipped) {
$first_row_skipped = true;
continue;
}
list($firstname, $lastname, $age) = $data;
$import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
}
fclose($handle);
}
// Proceed if any data got parsed
if (sizeof($import_queries))
{
foreach(array_chunk($import_queries, $import_chunk) as $queries)
{
$dbh->query(implode(' ', $queries));
}
}
?>
Array
(
[0] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Latheesan', 'Kanes', 26);
[1] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Adam', 'Smith', 30);
)