在MySQL数据库中存储MySQL查询......不好主意?

时间:2012-08-12 12:51:09

标签: php mysql

我有一个用户可以购买虚拟物品的商店,例如一次加电和永久更改用户帐户。这些购买可能会改变不同表格中的不同字段,并且可能存在大量项目,因此每次我想添加新产品时,我都不想为PHP文件编写新的附加内容。

我正在考虑将查询作为字符串保存到MySQL数据库中,然后当购买某个项目时,我可以从数据库中获取字符串并像这样运行它。

例如:表格items将包含一个字段query_to_run,其中包含用户购买商品时要运行的字符串UPDATE power_ups SET test = test WHERE test = 1

这是否曾经使用过,或者有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

在您的数据库中存储查询可能比您想象的更安全。如果插入查询的唯一方法是通过您自己的代码,那么您将不会真正面临注入攻击的风险(假设您自己编写了所有代码并且您没有包含令人讨厌的内容,其中ID = $ POST [ ......]在他们中间。

因此,就此而言,是的,将SQL保存在数据库中是安全的。

这是,但

但是,我认为你写一个简单的对象来处理这些类型的请求会好得多。您可以非常轻松地创建一个安全可靠的对象,该对象获取UserID并将其在查询中发送到数据库 - 无需在数据库中存储任何SQL(似乎唯一要改变的是用户ID示例

答案 1 :(得分:1)

如果我自己要解决这个问题,我会使用OOP PHP定义一个上电类,其中包含不同类型的上电,按照他们必须进行的数据库编辑类型进行分类。

我认为您正在寻找的是更快的东西,而您的解决方案就是这个(在短期内)然而当您更新数据库结构或实现旧模型不适合您希望时做出改进?

因为你的SQL查询是hard-coded,所以你必须重写每一个,而每次新的加电都需要比围绕它们构建soft-coded框架更长的时间。

所以,只要您不介意将来牺牲应用程序的可扩展性和灵活性,您的方法就可以在实践中发挥作用。

答案 2 :(得分:0)

我宁愿你通过php来实现它,因为它更高效,更不容易受到攻击。

答案 3 :(得分:0)

您当前的方法不灵活。例如,当您添加新项目时,是否还要添加新表格以存储有关刚刚添加的新项目的信息?如果你有10k个不同的项目,你打算创建10k个不同的表吗?这种方法还有其他一些问题。

您应该查看Fundamentals of Relational Database Design以创建一个充分利用关系数据库的设计。