我引用了我收到的另一个问题的部分回答:
在PHP/MySQL世界中,我会说存储过程是不行的
我想知道:是这样吗?为什么?为什么不?
[编辑]我的意思是这是一个没有特定需要的一般性问题[/ edit]
我开发并维护一个大型的PHP/MySQL应用程序.这是我对存储过程的体验.
随着时间的推移,我们的应用变得非常复 有了php方面的所有逻辑,一些操作将使用100多个简短查询查询数据库.
MySQL非常快,性能仍然可以接受,但不是很好.
我们在最新版本的软件中做出决定,将一些逻辑移至存储过程以进行复杂操作.
我们确实取得了显着的性能提升,因为我们不必在PHP和MySQL之间来回发送数据.
我同意这里的其他海报,PL/SQL不是现代语言,很难调试.
底线:存储过程对于某些情况是一个很好的工具.但除非你有充分的理由,否则我不建议使用它们.对于简单的应用程序,存储过程不值得麻烦.
在MySQL中使用存储过程时,通常需要在PHP中使用mysqli接口而不是常规的mysql接口.
造成这种情况的原因是存储过程通常会返回多于1个结果集.如果是这样,mysql API无法处理它,你会得到错误.
mysqli接口具有处理这些多个结果集的功能,例如mysqli_more_results和mysqli_next_result等功能.
请记住,如果从存储过程中返回任何结果集,则需要使用这些API,因为存储过程为实际执行生成1个结果集,然后为每个有意返回的结果集添加1个结果集.存储过程.
您是否有特定的需求让您考虑它们?存储过程比"普通"SQL更不便携,这通常是人们不想使用它们的原因.另外,在编写了PL/SQL的公平份额之后,我必须说编写代码的程序方式增加了复杂性,而且它不是非常现代或可测试的.在一些需要优化的特殊情况下,它们可能很方便,但我当然会三思而后行.杰夫有类似的意见.
我通常远离存储过程,因为它增加了数据库的负载,这是99%的时间,这是你最大的瓶颈.与使MySQL数据库复制相比,添加新的php服务器无关紧要.