gpt4 book ai didi

php - 使用csv文件创建表到数据库mysql

转载 作者:行者123 更新时间:2023-11-30 21:58:12 24 4
gpt4 key购买 nike

我正在尝试使用带字段的 csv 文件创建一个表,我的 csv 文件中也有列标题。但是,当我尝试运行它时......它只是显示并给我一个查询......我试图找出问题所在并且我坚持下去......你能帮我解决这个问题吗?谢谢

这是我的代码

<?php

$server = "localhost";
$username = "root";
$pass = "";
$dbname = "test";


$conn = new PDO("mysql:host=$server;dbname=$dbname", $username,
$pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


// Parameters: filename.csv table_name

$file = 'C:\Users\HP\Desktop\ACC.DBF.csv';
$table = 'acc';

// get structure from csv and insert db
ini_set('auto_detect_line_endings',TRUE);
$handle = fopen($file,'r');
// first row, structure
if ( ($data = fgetcsv($handle) ) === FALSE ) {
echo "Cannot read from csv $file";die();
}
$fields = array();
$field_count = 0;
for($i=0;$i<count($data); $i++) {
$f = strtolower(trim($data[$i]));
if ($f) {
// normalize the field name, strip to 20 chars if too long
$f = substr(preg_replace ('/[^0-9a-z]/', '_', $f), 0, 20);
$field_count++;
$fields[] = $f.' VARCHAR(255)';
}
}

$sqlcreate = $conn->prepare("CREATE TABLE $table (" . implode(', ', $fields) . ')');
$sqlcreate->execute();

echo "Create Table success" . "<br /><br />";
//$db->query($sql);
while ( ($data = fgetcsv($handle) ) !== FALSE ) {
$fields = array();
for($i=0;$i<$field_count; $i++) {
$fields[] = '\''.addslashes($data[$i]).'\'';
}
$sqlinsert = $conn->prepare("Insert into $table values(" . implode(', ',
$fields) . ')');
$sqlinsert->execute();
echo "Insert Table success" ;

}
fclose($handle);
ini_set('auto_detect_line_endings',FALSE);



?>

最佳答案

我已经创建了一个实用程序脚本,它做的事情与您正在尝试的相同。请检查它是否对您有帮助。


<?php

$fileName = './WP.csv';


function connectDB()
{
$server = "mysql2345";
$username = "root";
$pass = "root";
$dbname = "sc1";
$conn = new PDO("mysql:host=$server;dbname=$dbname", $username, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
}

function createDb($csv_path, $db)
{

if (($csv_handle = fopen($csv_path, "r")) === false) {
throw new Exception('Cannot open CSV file');
}

if(!isset($delimiter)) {
$delimiter = ',';
}

if (!isset($table)) {
$table = preg_replace("/[^A-Z0-9]/i", '', basename($csv_path));
}

if (!isset($fields)) {
$fields = array_map(function ($field){
return $field;
}, fgetcsv($csv_handle, 0, $delimiter));
}

$create_fields_str = join(', ', array_map(function ($field){
return "$field VARCHAR(200) NULL";
}, $fields));

echo $create_table_sql = "CREATE TABLE IF NOT EXISTS $table ($create_fields_str)";


$db->query($create_table_sql);

return ['table'=>$table, 'fields'=>$fields];

}

function loadData($fileName, $tableName, $fields, $db)
{
$fieldStr = implode(',', $fields);

$query = <<<eof
LOAD DATA LOCAL INFILE '$fileName'
INTO TABLE $tableName
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r'
($fieldStr)
eof;

echo $query;

$db->query($query);

}

$db = connectDB();

$tableInfo = createDb($fileName, $db);

loadData($fileName, $tableInfo['table'], $tableInfo['fields'], $db);

关于php - 使用csv文件创建表到数据库mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com