PHP phpMYadminを使用してます。
テーブル内の(カラム名、データ型)の取得方法がわかりません。
PDO接続 -> テーブル名指定 -> カラム名、データ型を取得の順番で行いたいのですが、取得方法がわかりません。
何かいい方法はありますか?
以下作成したソースコードです。
<?php set_time_limit(0); // コマンドライン パス取得 if($argc != 6){ echo "filepass,DBname,tablename,username,passwordを指定してください。"; exit(0); } $csv_path = $argv[1]; $db_name = $argv[2]; $table_name = $argv[3]; $user_name = $argv[4]; $password = $argv[5]; try { if(($handle_csv_file = fopen($csv_path, "r")) !== FALSE) { $dbh = null; // DB接続 $dbh = new PDO('mysql:host=127.0.0.1; dbname='. $db_name.'; charset=utf8', $user_name, $password); /* dbからカラム名取得 */ /* 取得したカラム名をもとにテーブル作成 $test_inport_table = 'CREATE TABLE test_inport ( ここに取得したカラム情報、データ型を要素分追加 例: id BIGINT(20) AUTO_INCREMENT PRIMARY KEY, synonym1 VARCHAR(50)。。。。。 実際は配列で追加? ) engine=innodb default charset=utf8'; */ // テーブル作成実行 $table_create = $dbh->query($test_inport_table); //ファイル書き込み if(($column_name = fgetcsv($handle_csv_file)) !== FALSE) { // インサート先指定 $insert = null; $insert = "INSERT INTO test_inport("; $count_column_name = count($column_name); for($i=1;$i<$count_column_name;$i++) { if($column_name[$i]==="") { continue; } $column_name[$i] = mb_convert_encoding($column_name[$i], 'UTF-8', 'SJIS-win'); if($i===1){ $insert = $insert.$column_name[$i]; }else{ $insert = $insert.",".$column_name[$i]; } } $insert = $insert.") VALUES (:"; for($i=1;$i<$count_column_name;$i++) { if($column_name[$i]==="") { continue; } $column_name[$i] = mb_convert_encoding($column_name[$i], 'UTF-8', 'SJIS-win'); if($i===1){ $insert = $insert.$column_name[$i]; }else{ $insert = $insert.", :".$column_name[$i]; } } $insert = $insert.")"; // 実行準備 $insert_start= $dbh->prepare($insert); if(!$insert_start){ $delet_table = "DROP TABLE test_inport"; $dbh->query($delet_table); throw new Exception('インサート先指定失敗'); } $title_skip = 1; // ファイルポインタ有効時 while($handle_csv_file && !feof($handle_csv_file)) { $input_csv = fgetcsv($handle_csv_file); if($title_skip < 2) { $title_skip++; continue; } if(!$input_csv) { continue; } // エンコード for($i=1;$i<count($input_csv);$i++) { if($input_csv[$i]==="") { continue; } $input_csv[$i] = mb_convert_encoding($input_csv[$i], 'UTF-8', 'SJIS-win'); } // インサート内容 $input_csv_array = []; for($i=1;$i<count($input_csv);$i++) { $input_csv_array[$column_name[$i]] = $input_csv[$i]; } //実行 $insert_start->execute($input_csv_array); // if($insert_start !== FALSE){ // throw new Exception('インサート失敗'); // } } if(!$test_inport_table){ $delet_table = "DROP TABLE test_inport"; $dbh->query($delet_table); throw new Exception('インサート失敗'); }else{ // 上書き $delet_table = "DROP TABLE $table_name"; $dbh->query($delet_table); $rename = "ALTER TABLE test_inport RENAME $table_name"; $dbh->query($rename); } }else{ $delet_table = "DROP TABLE test_inport"; $dbh->query($delet_table); throw new Exception('ファイル書き込み失敗'); } }else{ throw new Exception('ファイル接続失敗'); } // 接続終了 fclose($handle_csv_file); $insert_start= null; $dbh = null; echo "成功"; // エラー } catch(PDOException $e) { $delet_table = "DROP TABLE test_inport"; $dbh->query($delet_table); echo 'DB接続失敗:' . $e->getMessage(); exit(); } ?>また、サブテーブルのインポートが成功しているのかしていないのかの判断方法が分かれば教えてください。
回答5件
あなたの回答
tips
プレビュー