簡體   English   中英

在MySQL數據庫中存儲MySQL查詢......不好主意?

[英]Storing a MySQL query in a MySQL database… Bad Idea?

我有一個用戶可以購買虛擬物品的商店,例如一次加電和用戶帳戶的永久性更改。 這些購買可能會改變不同表中的不同字段,並且存在大量項目的可能性,因此每次我想添加新產品時,我都不想為PHP文件編寫新的添加內容。

我正在考慮將查詢作為字符串保存到MySQL數據庫中,然后當購買項目時,我可以從數據庫中獲取字符串並像這樣運行它。

例如:一個表items將包含一個字段query_to_run ,它將包含字符串UPDATE power_ups SET test = test WHERE test = 1將在用戶購買項目時運行。

這是用過的還是有更好的方法來做到這一點?

在您的數據庫中存儲查詢可能比您想象的更安全。 如果插入查詢的唯一方法是通過您自己的代碼,那么您將不會真正面臨注入攻擊的風險(假設您自己編寫了所有代碼並且您沒有包含令人討厭的內容,其中ID = $ POST [ ...] 在他們中。

因此,就此而言,是的,將SQL保存在數據庫中是安全的。

雖然這是但是

但是,我認為你寫一個簡單的對象來處理這些類型的請求會好得多。 您可以非常輕松地創建一個安全可靠的對象,該對象獲取UserID並將其在查詢中發送到數據庫 - 無需在數據庫中存儲任何SQL(似乎唯一要改變的是用戶ID例?

如果我自己要解決這個問題,我會使用OOP PHP來定義一個上電類,它具有不同類型的上電,按照它們必須進行的數據庫編輯類型進行分類。

我認為你正在尋找的東西是更快的,你的解決方案就是這個(在短期內)然而當你更新數據庫結構或者當你希望改進時你的舊模型不適合時會發生什么?

由於您的SQL查詢是硬編碼的,因此您必須重寫每一個,並且每次新的加電都需要比圍繞它們構建軟編碼框架更長的時間。

所以,只要您不介意在將來犧牲應用程序的可擴展性和靈活性,那么您的方法將在實踐中起作用。

我寧願你通過PHP來做,因為它更有效,更不容易受到攻擊。

您當前的方法根本不靈活 例如,當您添加新項目時,是否還要添加新表格以存儲有關剛剛添加的新項目的信息? 如果你有10k個不同的項目,你打算創建10k個不同的表嗎? 這種方法還有其他幾個問題。

您應該查看關系數據庫設計的基礎知識,以創建一個充分利用關系數據庫的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM