
現在、PHPでデータベースの値を利用するWEBアプリを作成しております。
一部のテーブルの値を削除するのに合わせて、
別テーブルの指定カラムを削除したいのですが、
PDOでは可能なのでしょうか。
例:テーブルAのレコード2を削除すると、
テーブルBのカラム2を削除するという流れです。
可能な場合は、サンプルサイトまたはサンプルコードを
教えてください。
不可能な場合は、PHPにて実装するためのサンプルサイトまたはサンプルコードを教えていただけませんでしょうか。
PHPのバージョンはPHP5.4でございます。
お手数ですが、ご教授いただけますと幸いでございます。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
文字通りに捉えた場合でも,ALTER TABLE文をPDO::exec等で実行できるため,可能ではあります。
ただ,データに合わせてALTER TABLE DROP COLUMNのようなことをするなら,
RDBMS側にTriggerを定義した方がよい気もしますが……。
この回答への補足
回答いただき、ありがとうございます。
下記のように記載することによって、無事、カラムの削除を行えました。
$sql = 'ALTER TABLE test_table DROP COLUMN num';
$stmt = $dbh->exec($sql);
下記、insert文のような形式でカラム名を変数で渡すことは可能でしょうか。
$sql = 'insert into shouhin (id, name) values (?, ?)';
$stmt = $dbh->prepare($sql);
$flag = $stmt->execute(array(6, '扇風機'));
No.6
- 回答日時:
いろんなアプリに関わってきたけど、動的にカラムを削除するシステムって出会ったことない。
まあ中にはあるのかもしれないけど、自分が設計するとしたら考えられない。
どういうリレーションとか考えてるかわからないから何とも言えないけど、
SQLを工夫したりすればいいだろうし。
カラムを削除するメリットが見つからないよ。
DBの設計ってふつうっていったらあれだけど、横(カラム数)に増やしたり減らしたりじゃなくって
縦(レコード数)にしたほうが扱いやすいよ。
No.5
- 回答日時:
>プランで追加を行うと、商品テーブルへ追加されたプランの料金の入力枠を追加する
>プランが削除されると、商品テーブルより対象のプランの入力枠(カラム)を削除する
こんな設計はあり得ません。プランと商品をキーにして別のテーブルを作るべきです(入力してデータを作るときにinsert/updateしていく)。
No.4
- 回答日時:
これはないわ・・・
カラムを削除しなくちゃいけない意図がわからない。
参照したときに削除されていたらエラーだらけになりますよ
運用方法が悪いので、こんなことをしないでも効率的でセキュアな運用はできると思います
そのうえで、どうしても処理したいのであれば
プレースホルダ(プリペアドステートメント)での処理はできないので
ダイレクトに変数を渡すしかないでしょう。
少しでもセキュリティをあげるためには
テーブルのカラム一覧をとって、消したいカラム名と完全一致するか
マッチさせた上で、変数を渡す・・・といった処理になるでしょう
この回答への補足
こういう使い方ってあまり一般的ではないのでしょうか。
行いたいのは、
プランテーブルと商品テーブルがございまして、
プランで追加を行うと、商品テーブルへ追加されたプランの料金の入力枠を追加する
プランが削除されると、商品テーブルより対象のプランの入力枠(カラム)を削除する
動作を考えております。
プランにidを付与してidでプランごとの料金を管理することも可能だとは思いますが、
どうなのかと思い、今回の操作に至りました。
変数への値渡しは、データベースに保管されているカラム名を元に行うようにしたいと思っております。
ご回答ありがとうございます。
参照は、データベースの値に関しましては、
キーの行を全部取り出すため、増減が有っても
class等を自動で割り当てるため、参照エラーには
ならないように組んではおります。
カラムを削除する理由は、呼び出す側のカテゴリが削除されたのに対して、
カラム残し続けるメリットを感じないため削除を行おうと考えておりましたが、
やはり通常では考えられない現象なのでしょうか。
カラムの削除無しのパターンでも構築を考えてみます。
No.3
- 回答日時:
>下記のように記載することによって、無事、カラムの削除を行えました。
>$sql = 'ALTER TABLE test_table DROP COLUMN num';
>$stmt = $dbh->exec($sql);
実際にカラムの削除だったのね。
それならupdateでは無理。
変数にしたければ
$sql = 'ALTER TABLE test_table DROP COLUMN ' . $targetColumn;
これでいいんでないの?
この回答への補足
aiyonoshizuku様
無事に削除することができました、
こういう使い方ってあまり一般的ではないのでしょうか。
行いたいのは、
プランテーブルと商品テーブルがございまして、
プランで追加を行うと、商品テーブルへ追加されたプランの料金の入力枠を追加する
プランが削除されると、商品テーブルより対象のプランの入力枠(カラム)を削除する
動作を考えております。
プランにidを付与してidでプランごとの料金を管理することも可能だとは思いますが、
どうなのかと思い、今回の操作に至りました。
No.1
- 回答日時:
カラムの削除って実際のカラムを削除するの?
それとも特定のカラムのデータを削除ってこと?
特定のカラムのデータってことだったら
テーブルAのレコード2のdelete文と
テーブルBのレコードのupdateを実行すればいいんじゃないの?
この回答への補足
カラムを削除します。
カテゴリが追加されるとカテゴリ用のカラムを作成し、
入力欄を追加します。
カテゴリが削除されることで、カラムを削除します。
回答をいただき、ありがとうございます。
update文でカラムの削除は可能でしたでしょうか。
もし、可能でしたら、サンプルをいただけますと幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
セッション関数を使わずにファ...
-
SplFileObject を利用したとき...
-
PHP8でWarning:Undefined varia...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PHPで画像の渡しが上手く行きま...
-
$filePath = './user_img/' . $...
-
php ラジオボタン
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
csvをDBへ読み込んだら、NULLが...
-
Accessへ日付をINSERT
-
変数にNULLを代入したい
-
クエリObjectをforeachで回す時...
-
SQLiteでDBに書き込みできません
-
SQLで返り値が空とでる
-
ヒアドキュメントでSQLを書く事...
-
access → Oracleへのデータ移...
-
月毎の集計値を同じデータグリ...
-
phpを使って、絞り込み検索、条...
-
OracleからAccessへのインポート
-
PHPでいいね機能を作りたいので...
-
php sqlite count 列数取得
-
PHPでPostgreSQLのテーブルを表...
-
会員サイトでログイン後の会員...
-
@コスメのようにユーザーが採...
-
テーブルに行を追加
-
どちらが高速ですか?
-
phpでテーブルを作る際変数によ...
おすすめ情報