有什么理由不为每个查询使用存储过程?

时间:2011-01-21 17:59:46

标签: mysql stored-procedures

我看到大多数应用程序在PHP中生成查询时,它们似乎非常适合指定直接数据访问的存储过程。有没有理由避免存储过程?

3 个答案:

答案 0 :(得分:4)

这几乎是一场宗教讨论,取决于你问的对象。开发人员和他们之间存在微妙的平衡。 dbas必须在这些类型的案例中进行协调。

基本上这就是你真正想要发挥作用的想法:

如果PHP代码使用动态SQL,则必须始终考虑针对SQL注入攻击的保护。输入必须在放入数据库之前进行清理。

如果PHP代码使用的是动态SQL,但约定是使用预处理语句,那么在某种程度上你会更安​​全,但必须注意如何使用预准备语句。

如果PHP代码使用存储过程,则会从开发人员中删除对SQL的大部分控制权,并由DBA与开发人员合作以提供满足其需求的适当解决方案。遗憾的是,这可能会带来很多时间和精力,并在开发/维护方面来回。

这是一个灰色地带的事情之一,并且有许多思想流派在哪个方面是正确的,因为它们都来自某些观点。

答案 1 :(得分:1)

有理由支持和反对。

如今,这条线在命令查询分离等方面变得越来越模糊。例如,您可以使用ORM查询我喜欢的表,但使用存储过程进行写入。

您是否在使用标准数据库平台的公司商店?或者是必须支持多个数据库引擎的供应商?

数据超出代码:您每年都会重构您的DAL存储库:存储过程不必更改

您可以为多个客户提供一致的“API”:我们有外部c#,Excel,Java +我们自己的c#。

存储过程是一种方法,可以说是:为什么不封装你的表?

链接:

答案 2 :(得分:0)

没有这样的。就我所见,这只是程序员的舒适问题。

要学习的两个主要内容是存储过程比代码内查询快得多,但它们涉及一些(只是一点点)更多的代码。 代码内查询是前进的方式(正如人们所说),这就是为什么引入LINQ in .NET的原因。它们使您能够在不重要的情况下摆脱n层架构。