2016-04-30 8 views
0

テーブルまたはテーブルのフィールドが存在しない場合、挿入ステートメントを無視するための許容された安全な方法はありますか?mysql:テーブルやフィールドが存在しない場合はINSERTを無視しますか?

「除外リスト」(配列)に対して配列をフィルタリングしようと多くの時間を費やしています。「除外リスト」が頻繁に変更されるとメンテナンスの頭痛になることがあります。私はそれは、配列全体を処理し、望ましいINSERT/UPDATEクエリを作成し、データが(今回はとにかく)INSERT/UPDATEクエリを無視する必要はない場合は作成する方が簡単だろうと思っています。将来、無視されたデータが将来的には望まれていたら、除外リストを書き換える代わりにDBを変更してください。

解明我々が開始されたデータ配列:

(第三者から来て、変更される可能性があり)アレイのサンプルは次のようになり:

{ 
      "ItemTypeCode": 0, 
      "ItemTypeDescription": "Normal", 
      "VendorId": "621eb496-d6d1-4860-af9b-ccae97bf4ef8", 
      "PurchaseOrderId": "d10991e0-a3b5", 
      "FreightDataId": null, 
      "Quantity": 1, 
      "Model": "ZZEAGLEUPGR", 
      "StockModel": "", 
      "AltStockModel": "", 
      "AltModel": "", 
      "CatalogProdId": "723b8e0b", 
      "CustomerSpecificPricings": [], 
      "GasSteamUtilityGrids": [], 
      "HvacUtilityGrids": [] 
     }] 

エンドユーザ"FreightDataId"または "GasSteamUtilityGrids"サブアレイのデータのいずれかを(今のところはとにかく)必要としないかもしれません。

+0

はい、ダムのアイデア。私はいくつかのバージョン管理システムを使用したいと思います。 [tag:git]をPHPコードに使用し、INSERTを別のブランチのテーブルに入れます。次に、時が来たら、そのブランチ(=コード)を有効にします。 – PerlDuck

+0

@PerlDog - どのようにgitが適用されているのかわかりませんが(おそらく私の悪いことではありません)、配列はjsonとしてMySQL DBに保存されています。 jsonファイルは多次元であり、 '除外'リストはjson内の異なるレベルにあることができます。つまり、jsonファイルはすべて異なるベンダで作成されたものと同じ構造ではありませんが、さまざまなベンダー間で同じキーが使用されます。 –

+0

ああ、OK。その後、私のコメントを忘れる。私はあなたを誤解しました。 – PerlDuck

答えて

0

そのように行かないように誘惑しないでください。

テーブル名と列をユーザーが指定できるようにすると、既に危険なパスになっています。これに対して私は強く勧めます。保護は原始的です。

これを進めたい場合は、実際にはブラックリスト(除外リスト)ではなくホワイトリスト(インクルードリスト)を使用する必要があります。リストされた表および列のみが、データベース・アクションを実行するためにユーザーによって指定されることがあります。つまり、新しいテーブルやフィールドを追加すると、ホワイトリストを忘れても安全です。

このようなリストなしでは行かないでください。そのような(白い)リストを維持する必要がないという利点よりも、保護はずっと重要です。

+0

dbのホワイトリストを維持するのに問題はありません。なぜなら、配列が処理された時点でデータをフィルタリングすることができないからです。配列全体を制御することはできません(第三者から提供されています)。配列全体が処理されると(foreachなどを使用して)、実際にdb内にある必要があるものに焦点を当てることができます最終用途。コメントありがとう。 –

+0

私は参照してください。その配列の目的を想像するのは少し難しいです。より深い意見が必要な場合は、そのような配列のサンプルコンテンツをいくつか追加し、それを使って何を行うかを示します。 – trincot

+0

ああ、コメントではうまくいきません(タグを使うとき)。あなたはあなたの質問に追加してそれを置くことができますか? – trincot

関連する問題