teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

誤字を編集

2020/04/27 05:01

投稿

ennkai2414
ennkai2414

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- PHP内で、phpadminでテーブル内の(カラム名、データ型)の取得記載方法がわかりません
1
+ PHP内で、MYSQLでテーブル内の(カラム名、データ型)の取得記載方法がわかりません
body CHANGED
@@ -1,4 +1,5 @@
1
+ PHP phpMYadminを使用してます。
1
- PHP phpadminでテーブル内の(カラム名、データ型)の取得方法がわかりません。
2
+ テーブル内の(カラム名、データ型)の取得方法がわかりません。
2
3
 
3
4
  PDO接続 -> テーブル名指定 -> カラム名、データ型を取得の順番で行いたいのですが、取得方法がわかりません。
4
5
  何かいい方法はありますか?

2

最後に新しい質問を追加

2020/04/27 05:01

投稿

ennkai2414
ennkai2414

スコア4

title CHANGED
File without changes
body CHANGED
@@ -155,4 +155,6 @@
155
155
  exit();
156
156
  }
157
157
 
158
- ?>
158
+ ?>
159
+
160
+ また、サブテーブルのインポートが成功しているのかしていないのかの判断方法が分かれば教えてください。

1

ソースコードを追加しました。

2020/04/27 04:59

投稿

ennkai2414
ennkai2414

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- PHP phpadminでテーブル内の(カラム名、データ型)の取得方法がわかりません
1
+ PHP内で、phpadminでテーブル内の(カラム名、データ型)の取得記載方法がわかりません
body CHANGED
@@ -1,4 +1,158 @@
1
1
  PHP phpadminでテーブル内の(カラム名、データ型)の取得方法がわかりません。
2
2
 
3
3
  PDO接続 -> テーブル名指定 -> カラム名、データ型を取得の順番で行いたいのですが、取得方法がわかりません。
4
- 何かいい方法はありますか?
4
+ 何かいい方法はありますか?
5
+
6
+ 以下作成したソースコードです。
7
+ <?php
8
+ set_time_limit(0);
9
+
10
+ // コマンドライン パス取得
11
+ if($argc != 6){
12
+ echo "filepass,DBname,tablename,username,passwordを指定してください。";
13
+ exit(0);
14
+ }
15
+ $csv_path = $argv[1];
16
+ $db_name = $argv[2];
17
+ $table_name = $argv[3];
18
+ $user_name = $argv[4];
19
+ $password = $argv[5];
20
+
21
+ try {
22
+ if(($handle_csv_file = fopen($csv_path, "r")) !== FALSE) {
23
+ $dbh = null;
24
+ // DB接続
25
+ $dbh = new PDO('mysql:host=127.0.0.1; dbname='. $db_name.'; charset=utf8', $user_name, $password);
26
+
27
+ /*
28
+ dbからカラム名取得
29
+ */
30
+
31
+ /*
32
+ 取得したカラム名をもとにテーブル作成
33
+ $test_inport_table = 'CREATE TABLE test_inport (
34
+
35
+  ここに取得したカラム情報、データ型を要素分追加
36
+
37
+ 例:
38
+ id BIGINT(20) AUTO_INCREMENT PRIMARY KEY,
39
+ synonym1 VARCHAR(50)。。。。。
40
+
41
+ 実際は配列で追加?
42
+
43
+
44
+ ) engine=innodb default charset=utf8';
45
+ */
46
+ // テーブル作成実行
47
+ $table_create = $dbh->query($test_inport_table);
48
+
49
+ //ファイル書き込み
50
+ if(($column_name = fgetcsv($handle_csv_file)) !== FALSE) {
51
+ // インサート先指定
52
+ $insert = null;
53
+ $insert = "INSERT INTO test_inport(";
54
+ $count_column_name = count($column_name);
55
+ for($i=1;$i<$count_column_name;$i++) {
56
+ if($column_name[$i]==="") {
57
+ continue;
58
+ }
59
+ $column_name[$i] = mb_convert_encoding($column_name[$i], 'UTF-8', 'SJIS-win');
60
+ if($i===1){
61
+ $insert = $insert.$column_name[$i];
62
+ }else{
63
+ $insert = $insert.",".$column_name[$i];
64
+ }
65
+ }
66
+ $insert = $insert.") VALUES (:";
67
+ for($i=1;$i<$count_column_name;$i++) {
68
+ if($column_name[$i]==="") {
69
+ continue;
70
+ }
71
+ $column_name[$i] = mb_convert_encoding($column_name[$i], 'UTF-8', 'SJIS-win');
72
+
73
+ if($i===1){
74
+ $insert = $insert.$column_name[$i];
75
+ }else{
76
+ $insert = $insert.", :".$column_name[$i];
77
+ }
78
+ }
79
+ $insert = $insert.")";
80
+
81
+ // 実行準備
82
+ $insert_start= $dbh->prepare($insert);
83
+
84
+ if(!$insert_start){
85
+ $delet_table = "DROP TABLE test_inport";
86
+ $dbh->query($delet_table);
87
+ throw new Exception('インサート先指定失敗');
88
+ }
89
+
90
+ $title_skip = 1;
91
+ // ファイルポインタ有効時
92
+ while($handle_csv_file && !feof($handle_csv_file)) {
93
+ $input_csv = fgetcsv($handle_csv_file);
94
+ if($title_skip < 2) {
95
+ $title_skip++;
96
+ continue;
97
+ }
98
+ if(!$input_csv) {
99
+ continue;
100
+ }
101
+
102
+ // エンコード
103
+ for($i=1;$i<count($input_csv);$i++) {
104
+ if($input_csv[$i]==="") {
105
+ continue;
106
+ }
107
+ $input_csv[$i] = mb_convert_encoding($input_csv[$i], 'UTF-8', 'SJIS-win');
108
+ }
109
+
110
+ // インサート内容
111
+ $input_csv_array = [];
112
+ for($i=1;$i<count($input_csv);$i++) {
113
+ $input_csv_array[$column_name[$i]] = $input_csv[$i];
114
+ }
115
+ //実行
116
+ $insert_start->execute($input_csv_array);
117
+ // if($insert_start !== FALSE){
118
+ // throw new Exception('インサート失敗');
119
+ // }
120
+ }
121
+
122
+ if(!$test_inport_table){
123
+ $delet_table = "DROP TABLE test_inport";
124
+ $dbh->query($delet_table);
125
+ throw new Exception('インサート失敗');
126
+ }else{
127
+ // 上書き
128
+ $delet_table = "DROP TABLE $table_name";
129
+ $dbh->query($delet_table);
130
+ $rename = "ALTER TABLE test_inport RENAME $table_name";
131
+ $dbh->query($rename);
132
+ }
133
+
134
+ }else{
135
+ $delet_table = "DROP TABLE test_inport";
136
+ $dbh->query($delet_table);
137
+ throw new Exception('ファイル書き込み失敗');
138
+ }
139
+ }else{
140
+ throw new Exception('ファイル接続失敗');
141
+ }
142
+ // 接続終了
143
+ fclose($handle_csv_file);
144
+ $insert_start= null;
145
+ $dbh = null;
146
+
147
+ echo "成功";
148
+
149
+ // エラー
150
+ } catch(PDOException $e) {
151
+
152
+ $delet_table = "DROP TABLE test_inport";
153
+ $dbh->query($delet_table);
154
+ echo 'DB接続失敗:' . $e->getMessage();
155
+ exit();
156
+ }
157
+
158
+ ?>