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

7

我正在把一个SQL查询保存在数据库表中,以便保存要使用的条件,无论向数据库中输入多少记录。

是否有正确的数据类型和语法可用来存储查询语句。 我已将数据类型设置为VARCHAR(1055),因为我认为这已经足够了。 是否有MySQL函数可以确保文本被正确保存,例如引号和保持单个字符串。

更新:保存查询语句的原因

我们允许系统的用户创建一个联系人列表,该列表基于系统中的其他用户,因此他们使用表单创建查询,以选择具有行政工作类型的所有用户。

上述查询然后保存在数据库中,以便即使添加一个新的行政工作类型用户,也可以在发送通信时包括他的联系方式。

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


你是从哪里保存它的?直接从控制台?从PHP?还是从PhpMyAdmin? - Aleks G
1
一个 SQL 查询本身只是一个字符串,所以 varchar 似乎是正确的数据类型。不过保存查询语句非常不寻常。我想你肯定有更好的方法来完成你想要做的事情。此外,你的应用程序中还存在潜在的 SQL 注入点,所以你需要确保语句被正确地清理。 - David
从 PHP 中,检查查询的更新原因。 - tread
我猜你的用户不是自己构建查询,而是根据他们从表单中选择的选项生成查询?那么只需保存这些选项-如果您可以从这些选项构建查询一次,那么您可以再次执行此操作。 - CBroe
但是如果没有安全漏洞,只存储查询会更容易。 - tread
显示剩余2条评论
4个回答

4

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

更多背景信息:

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

你的方法的另一个缺点是,如果允许用户输入任意 SQL,则会创建一个大的安全问题。一位合同未续约的聪明实习生可能会存储以下内容:

DROP DATABASE my_database.

我认为我已经通过不允许直接输入SQL并且从未发布查询来防止这种情况发生,它存储在会话变量中并由系统生成。 - tread
@StephenH:只是想确认一下。 - Lukas Eder

1
没有正确的数据类型来存储查询。
但是您可以始终使用HTMLencode字符来删除HTML字符。
或者,您可以使用PHP的htmlentities()将字符转换。

0

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接