現在、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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
csvをDBへ読み込んだら、NULLが...
-
PHPとMysql での順位付け
-
SQLで返り値が空とでる
-
PHPでMySQLのテーブルをダン...
-
mysqlコマンドだけ文字化け
-
MYSQLのTRUNCATE TABLE
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
ResultSetインターフェイスでの...
-
insert1つの処理でもトランザ...
-
PHPで[]の使い方について
-
JAVA SQLServerException 列名 ...
-
VB.NET
-
BLOBでの画像表示について
-
DBで検索結果に該当するデータ...
-
エラー3011
-
SQL文2つ実行
-
in 'where clause'のエラーの理由
-
sqlから多次元配列に要素を格納...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
変数にNULLを代入したい
-
csvをDBへ読み込んだら、NULLが...
-
OracleからAccessへのインポート
-
日またぎの計算
-
カラムにデータがあるかないか...
-
SQLで返り値が空とでる
-
phpでテーブルを作る際変数によ...
-
PHPでフォームからデータDBに書...
-
php sqlite count 列数取得
-
テーブルの、colspan="0"のIEと...
-
PHP PDOを利用してカラムの削除...
-
テーブルに行を追加
-
ヒアドキュメントでSQLを書く事...
-
PHPでPostgreSQLのテーブルを表...
-
DB Error: no such field
-
Accessへ日付をINSERT
-
phpを使用し、カテゴリー別に表...
-
クエリObjectをforeachで回す時...
-
phpにて出欠登録管理を作成して...
おすすめ情報