質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

3回答

1615閲覧

php MYSQLでDBのテーブル内のカラムにコメント付与ができません

kaito2414

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/04/30 03:19

編集2020/04/30 03:55

https://qiita.com/AkihikoIkeda/items/a02ead94bbbc94b64b05
上記のサイトを参考にコードを書いてみたのですが、どうしてもコメント付与ができないです。
どのように修正すればよろしいでしょうか?

既に存在しているテーブルのサブテーブルを作成しています。
try-catchは実際のコードでは書いていますが、今回は省いています。

php

1// DB接続 2 $dbh_admin = new PDO('mysql:host=127.0.0.1; dbname='.$db_name[0].';charset=utf8', $user, $pass); 3 $dbh_common = new PDO('mysql:host=127.0.0.1; dbname='.$db_name[1].';charset=utf8', $user, $pass); 4 $dbh_front = new PDO('mysql:host=127.0.0.1; dbname='.$db_name[2].';charset=utf8', $user, $pass); 5 6 $dbh[] = $dbh_admin; 7 $dbh[] = $dbh_common; 8 $dbh[] = $dbh_front; 9 $dbh_count = count($dbh); 10 11 // テーブル関連 12 for($i=0;$i<$dbh_count;$i++){ 13 $column_name = []; 14 $column_type = []; 15 $column_comment = []; 16 $co = 0; 17 18 $db_table = $dbh[$i]->query('SHOW TABLES'); 19 while($db_all_table = $db_table->fetch(PDO::FETCH_ASSOC)){ 20 21 // テーブル名取得 22 $db_table_name[$i][] = $db_all_table; 23 $table_name = $db_table_name[$i][$co]['Tables_in_'.$db_name[$i]]; 24 25 // カラム情報取得 26 $column = "show full columns from ".$table_name; 27 $column_data = $dbh[$i]->query($column); 28 foreach($column_data as $value){ 29 $column_name[$co][] = $value[0]; 30 $column_type[$co][] = $value[1]; 31 $column_comment[$co][] = $value[8]; 32 } 33 34 if($i===1){ 35 $count_column_name = count($column_name[$co]); 36 $import = 'CREATE TABLE '.$table_name.'_sub ('; 37 for($s=0;$s<$count_column_name;$s++){ 38 if($s===0 && $column_comment[$co][$s]){ 39 $import = $import.$column_name[$co][$s].' '.$column_type[$co][$s].' AUTO_INCREMENT PRIMARY KEY comment'.$column_comment[$co][$s]; 40 }else if($s===0 && !$column_comment[$co][$s]){ 41 $import = $import.$column_name[$co][$s].' '.$column_type[$co][$s].' AUTO_INCREMENT PRIMARY KEY'; 42 }else if($column_comment[$co][$s]){ 43 $import = $import.','.$column_name[$co][$s].' '.$column_type[$co][$s].' comment '.$column_comment[$co][$s]; 44 }else{ 45 $import = $import.','.$column_name[$co][$s].' '.$column_type[$co][$s]; 46 } 47 } 48 $import = $import.') engine=innodb default charset=utf8'; 49 $table_create = $dbh[$i]->query($import); 50 } 51 $co++; 52 } 53 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/30 03:22

「コメントを付与できるSQL」自体はそもそも作れて直実行で成功した上でPHPに導入されてますか? また、PHP側で作ったSQLを取得して確かめてみましたか?
kaito2414

2020/04/30 03:48

SQLでは実行できます
m.ts10806

2020/04/30 03:52

では、単に正しく作れてないか、既に存在しているテーブルをCREATEしようとしているからでは。 try-catchでException捕捉するように組んで、デバッグしてみてください
kaito2414

2020/04/30 03:54

既に存在しているテーブルのサブテーブルを作成しています。 try-catchは実際のコードでは書いていますが、今回は省いています。
guest

回答3

0

ベストアンサー

既に存在しているテーブルにコメントを「追加」するときはCREATE文ではなく ALTER文です。
ちなみに前の質問でも言及している。

投稿2020/04/30 03:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaito2414

2020/04/30 03:41

すでに存在しているテーブルではなく、新しく作るテーブルにコメントを付与したいのですが、それでもALTER文なのですか?
kaito2414

2020/04/30 03:42

それとも、新しくテーブルを作り、そのコードの下にALTER文を入れるということですか?
退会済みユーザー

退会済みユーザー

2020/04/30 03:44 編集

「新しく作るテーブルにコメントを付与したいの」に、なんで、SHOW TABLES しているのですか ? 書かれたコードから意図をなんとなく汲み取ることができても、書いていない意図を読み解くことは無理ゲーですよ。
退会済みユーザー

退会済みユーザー

2020/04/30 03:51 編集

あー。なるほど、既存のテーブルをもとに新しいテーブルを作成したいということねー。 そりゃ設計が悪いわ。 RDBの特性を全否定してしまう設計なので、リレーションとか、正規化を学んだほうがいいと思いますよ。
kaito2414

2020/04/30 03:50

SHOW TABLESで現在存在しているテーブルの情報を取得 取得した情報をもとに(現在存在しているテーブル_sub)の名前でサブテーブル作成というかんじです。
退会済みユーザー

退会済みユーザー

2020/04/30 03:54 編集

にしても「CREATE TABLE 新テーブル名 LIKE 元テーブル名;」でよくない?
kaito2414

2020/04/30 04:03

........そのような書き方があったのですね。 完全に自分の調査不足でした。 かなりめんどくさい書き方をしていましたね。 本当に、ありがとうございます。 そのコードを試したところ無事実行できました。 貴重なお時間の中誠にありがとうございます。
guest

0

個人的な疑問です。この部分の_subは必要でしたか(Mysqlの構文)?

php

1 2$import = 'CREATE TABLE '.$table_name.'_sub ('; 3

個人的な意見ですが、まずは、Databaseとテーブルを一つに絞ってからコードを拡張していく方法が
良いと思います。
ご質問の内容ですとループや変数の検証に時間が掛かりすぎると感じます。
前の方のアドバイスの通り、一気にコードを書くスタイルだと検証に時間がかかると思います。

投稿2020/04/30 03:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/30 03:58

私なら、まず、コマンドラインからMysqlへのsql構文が正しいか確認します。 次に、データベースの中の一つのテーブルへの変更をPHPで記述します。 次に、共通化・関数化できないか考えます(sqlを渡して作成する関数)。 次に、クラス化が必要か、いずれ考えることとしています。 などの手順を踏むと割合よい気がしています・・・。
guest

0

そもそも論ですが、それを「PHPから」やらないといけないのはどのような事情でしょうか。

マイグレーションやデータベース自体の管理ツールを作るような状況でなければ、「PHPからデータベース構造を変える」必要が出ること自体が、一般に設計が悪いです。

投稿2020/04/30 03:42

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/30 03:46

phpMyAdminなどからでも十分な気がしますね。コードからやる必要性が分からない
kaito2414

2020/04/30 03:52

コマンドでphpをたたくと3つのDBにインサートするシステムを作っています。 phpで作成するという指示がありました。
maisumakun

2020/04/30 03:56 編集

データベースは事前に別な方法で用意しておく、で問題ないかと思うのですが、それも「PHPからしなければならない」ものなのでしょうか(別に用意したDBにPHPからインサートだけ行うことも、もちろん可能です)。
退会済みユーザー

退会済みユーザー

2020/04/30 04:01

接続情報3つもあってそれぞれにとなると、なんかのデプロイツールのコード?dすかねえ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問