我一直在尝试使用 CSV 文件的第一行来创建数据库,但是我不断收到关于我的 PDO 语法的错误。显然$columns
变量中的 varchar(250) 出了点问题:
致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“varchar(250))”附近使用正确的语法
代码如下:
<?
/********************************************************************************/
// Parameters: filename.csv table_name
$argv = 'seo_domains.csv seo_domains';
if($argv[1]) { $file = $argv[1]; }
else {
echo "Please provide a file name\n"; exit;
}
if($argv[2]) { $table = $argv[2]; }
else {
$table = pathinfo($file);
$table = 'seo_domains';
}
/********************************************************************************/
// Get the first row to create the column headings
$fp = fopen('seo_domains.csv', 'r');
$frow = fgetcsv($fp);
$ccount = 0;
foreach($frow as $column) {
$ccount++;
if($columns) $columns .= ', ';
$columns .= "$column varchar(250)";
}
$qry = $dbcon->prepare("CREATE TABLE if not exists $table ($columns);");
$qry->execute();
/********************************************************************************/
// Import the data into the newly created table.
$file = $file;
$qry = $dbcon->prepare("load data infile '$file' into table $table fields terminated by ',' ignore 1 lines");
$qry->execute();
?>
我将$fp
fopen 更改为静态值而不是使用$file
,因为显然编写上述代码的人没有提到如何格式化$argv
变量。是的,我已经尝试根据他在第一行的“参数”注释进行格式化,但仍然无济于事。我还将变量静态更改$table
为“seo_domains”,因为该$argv
变量没有被正确拆分。我想知道是否有人对为什么我的数据库会导致所描述的错误有任何想法,而不是重新编码上述代码。任何帮助表示赞赏。只是尝试根据提供的 CSV 文件的第一行创建一个表。创建后,我想按照惯例继续在 CSV 中的第 1 行下方插入所有行值。