mysql:如果表和/或字段没有';不存在


mysql: Ignoring INSERT if table and/or field doesn't exist?

如果表或表中的字段不存在,是否有一种可接受/安全的方法可以忽略插入语句?

我花了很多时间试图根据"排除列表"(也是一个数组)过滤一个数组,我意识到如果"排除名单"经常更改,可能会让维护人员头疼。我想知道处理整个数组、创建所需的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"子阵列中的任何数据。

不要想走那条路。

如果允许用户指定表名和列,那么您已经处于危险的路径上。我强烈建议不要那样做。保护是最原始的。

但如果你想这样做,你实际上不应该使用黑名单(排除名单),而应该使用白名单(包括名单)。用户只能指定列出的表和列来执行数据库操作。这意味着,当您添加新的表和/或字段时,即使忘记调整白名单,您也是安全的。

不要试图不列出这样的清单。保护比不必维护这样一个(白名单)的好处重要得多。