2

CSV ファイルの最初の行を使用してデータベースを作成しようとしていますが、PDO 構文に関するエラーが引き続き発生します。$columnsどうやら、変数の varchar(250) で問題が発生しているようです。

致命的なエラー: キャッチされない例外 'PDOException' とメッセージ 'SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。1 行目の 'varchar(250))' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

コードは以下のとおりです。

<?
/********************************************************************************/
// 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();
?>

$fpfopen を使用する代わりに静的な値に変更したのは$file、明らかに上記のコードをコーディングした人が$argv変数のフォーマット方法について言及していなかったからです。はい、最初の行の「パラメーター」コメントに従ってフォーマットを試みましたが、それでも役に立ちません。また、変数が適切に分割されていない$tableため、変数を「seo_domains」に静的に変更しました。$argv上記のコードを再コーディングする代わりに、データベースで説明されているエラーが発生する理由について誰か考えがあるかどうか疑問に思っています。どんな助けでも大歓迎です。提供された CSV ファイルの最初の行に基づいてテーブルを作成しようとしています。作成時に、通常どおり、CSV の行 1 の下にすべての行の値を挿入し続けたいと思います。

4

2 に答える 2

0

試す:

CREATE TABLE if not exists seo_domains (Domain varchar(250), Server varchar(250), IP varchar(250), Username varchar(250), Password varchar(250), Nameserver varchar(250), NameCheap varchar(250), GA varchar(250), WMT varchar(250), SB varchar(250), GAW varchar(250), notes varchar(250), BlankField varchar(250), id INT KEY NOT NULL AUTO_INCREMENT varchar(250));
于 2013-08-07T21:10:41.140 に答える