2013-06-26 34 views
5

我將一個SQL query保存在數據庫表中,因此無論是否有更多記錄輸入到數據庫中,都要保存要使用的條件。如何將SQL查詢保存到表中?

是否存在用於存儲查詢語句的正確數據類型和語法。 我已經將數據類型設置爲VARCHAR(1055),因爲我認爲這足夠了。 是否有一個MySQL function將確保文本正確保存 在引用和保持單個字符串。

更新:原因保存查詢

我們允許系統的用戶創建的基礎上,系統的其他用戶聯繫信息列表,以便他們創建使用窗體選擇查詢說所有用戶工作類型的執行。

上述查詢被保存在數據庫中,因此即使在執行作業類型中添加了新用戶,發送通信時也會包含他的聯繫詳細信息。

我認爲這是做到這一點的最佳方式......你有什麼想法嗎?

+0

你從哪兒保存呢?直接從控制檯?從PHP?從PhpMyAdmin? –

+0

SQL查詢本身只是一個字符串,所以'varchar'似乎是正確的數據類型給我。但是,保存查詢是非常不尋常的。我想有一種更好的方式可以完成你想要完成的任何事情。它也似乎是你在你的應用程序中創建了額外的潛在的SQL注入點,所以你需要確保語句被正確地清理。 – David

+0

從PHP,檢查查詢更新的原因 – surfer190

回答

3

VARCHAR(1055)轉換將永遠是不夠的。只需使用TEXT,MySQL的數據類型爲任意長度的文本(在其他數據庫中也稱爲CLOB)。

更多背景信息:

儘管如此,我想你應該查詢在應用層上的這種或那種方式可能模型而不是存儲明文SQL數據庫中的, 。當您更改模式時,所有這些SQL語句可能都是錯誤的。然後祝你好運!

您的方法的另一個缺點是,如果允許用戶輸入任意SQL,則會造成嚴重的安全問題。一個漂亮的實習生,其合同沒有延長可能存儲

DROP DATABASE my_database. 
+0

嗯,我想我已經通過不允許直接SQl條目保護,我從來沒有發佈查詢,它存儲在會話變量中,並由系統生成。 – surfer190

+0

@StephenH:只是想確定。 –

1

沒有正確的數據類型來存儲查詢。

但是你總是可以使用HTMLencode字符去除HTML字符。

或者你也可以使用PHP htmlentities()的字符

0

我相信這不是正確的做法。您不應該將生成的查詢存儲在數據庫中,而應該存儲導致生成的SQL的參數。在您的實現中,當您想要更改該查詢時,您必須解析存儲的SQL以獲取參數,以便將篩選表單顯示給用戶。但是,如果保留參數,則總是可以在需要時重新生成查詢,並且可以輕鬆地顯示當前的過濾器表單。

如果你堅持你的存儲SQL壽,因爲我前面提到的,文字是正確的字段類型,因爲它是不太可能切斷在現場大小限制的SQL字符串。

相關問題