6

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

是否有正确的数据类型和语法可用于存储 Query 语句。我已经设置了数据类型,VARCHAR(1055)因为我认为这已经足够了。是否有一个MySQL function可以确保文本正确保存的方法,引用并将其保留为单个字符串。

更新:保存查询的原因

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

然后将上述查询保存在数据库中,这样即使在执行工作类型中添加了新用户,发送通信时也会包含他的联系方式。

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

4

4 回答 4

3

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

更多背景信息:

尽管如此,我认为您可能应该在应用程序层以一种或另一种方式对查询进行建模,而不是在数据库中存储纯文本 SQL。当您更改架构时,所有这些 SQL 语句都可能是错误的。那么祝你移民顺利!

您的方法的另一个缺点是,如果允许用户输入任意 SQL,您将产生很大的安全问题。一个合同没有延长的漂亮实习生可能会存储

DROP DATABASE my_database.
于 2013-06-26T10:20:24.503 回答
1

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

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

或者你可以使用 PHPhtmlentities()来转换字符

于 2013-06-26T10:12:43.510 回答
0

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

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

于 2014-08-08T09:43:41.927 回答
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

于 2013-06-26T10:23:25.783 回答