如何将SQL查询保存到表中?

时间:2013-06-26 10:07:39

标签: mysql

我在数据库表中保存SQL query,因此无论是否有更多记录输入数据库,都要保存要使用的条件。

是否存在用于存储Query语句的正确数据类型和语法。 我已将数据类型设置为VARCHAR(1055),因为我认为这已经足够了。 是否有MySQL function可确保文本正确保存 就报价而言,保持单一字符串。

更新:保存查询的原因

我们允许系统用户根据系统的其他用户创建联系人详细信息列表,因此他们使用表单创建查询,以选择具有执行类型的所有用户。

然后将上述查询保存在数据库中,这样即使在执行作业类型中添加了新用户,发送通信时也会包含其联系人详细信息。

我认为这是最好的方法......你有什么想法吗?

4 个答案:

答案 0 :(得分:3)

VARCHAR(1055)永远不够。只需使用TEXT,MySQL的数据类型用于任意长度的文本(在其他数据库中也称为CLOB)。

更多背景信息:

尽管如此,我认为您应该在应用层上以某种方式对查询进行建模,而不是在数据库中存储纯文本SQL。更改架构时,所有这些SQL语句可能都是错误的。祝你好运迁移!

如果允许用户输入任意SQL,那么您的方法的另一个缺点是您正在创建一个很大的安全问题。合同没有延长的漂亮实习生可以存储

DROP DATABASE my_database.

答案 1 :(得分:1)

没有正确的数据类型来存储查询。

但您可以使用HTMLencode字符始终删除HTML字符。

或者您可以使用PHP htmlentities()转换字符

答案 2 :(得分:0)

如果您不需要传递参数,则可以执行CREATE VIEW。您可以使用MySQLi从PHP执行代码。

CREATE VIEW myquery AS
SELECT * FROM mytable

用法:

SELECT * FROM myquery

http://dev.mysql.com/doc/refman/5.0/en/create-view.html

答案 3 :(得分:0)

我认为这不是正确的做法。您不应该将结果查询存储在数据库中,而应该存储导致创建的sql的参数。在您希望更改该查询的实现中,您必须解析存储的SQL以获取参数,以便向用户显示过滤器表单。但是,如果您保留参数,则可以在需要时重新生成查询,并且可以轻松显示当前过滤器表单。

如果你坚持存储你的SQL,如前所述,TEX​​T是正确的字段类型,因为它不太可能在字段大小限制下切断你的sql字符串。