我在数据库表中保存SQL query
,因此无论是否有更多记录输入数据库,都要保存要使用的条件。
是否存在用于存储Query语句的正确数据类型和语法。
我已将数据类型设置为VARCHAR(1055)
,因为我认为这已经足够了。
是否有MySQL function
可确保文本正确保存
就报价而言,保持单一字符串。
更新:保存查询的原因
我们允许系统用户根据系统的其他用户创建联系人详细信息列表,因此他们使用表单创建查询,以选择具有执行类型的所有用户。
然后将上述查询保存在数据库中,这样即使在执行作业类型中添加了新用户,发送通信时也会包含其联系人详细信息。
我认为这是最好的方法......你有什么想法吗?
答案 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
答案 3 :(得分:0)
我认为这不是正确的做法。您不应该将结果查询存储在数据库中,而应该存储导致创建的sql的参数。在您希望更改该查询的实现中,您必须解析存储的SQL以获取参数,以便向用户显示过滤器表单。但是,如果您保留参数,则可以在需要时重新生成查询,并且可以轻松显示当前过滤器表单。
如果你坚持存储你的SQL,如前所述,TEXT是正确的字段类型,因为它不太可能在字段大小限制下切断你的sql字符串。