存储过程在php / mysql世界中无法实现吗?
我引用了我收到的另一个问题的答案的一部分:
In the PHP/MySQL world I would say stored procedures are no-go
我想知道:是这样吗?为什么?为什么不?
[edit]我的意思是说这是一个一般性问题,无需特别考虑[/ edit]
解决方案
回答
我们是否有特定的需求需要考虑?与"普通" SQL相比,存储过程的可移植性要差得多,这通常就是人们不想使用它们的原因。同样,在编写了相当一部分的PL / SQL之后,我必须说,编写代码的过程方法增加了复杂性,并且它不是非常现代或者可测试的。在某些需要优化的特殊情况下,它们可能会派上用场,但是我肯定会三思而后行。杰夫有类似的看法。
回答
mysql可能存在存储过程的恐惧症,部分原因是它没有强大的功能(与Postgresql甚至MSSQL相比,mysqls存储过程都非常缺乏)。
加号:它们使从一种以上的语言进行交互变得更加容易。
如果有人说"使用存储过程是不好的,因为它不能移植到不同的数据库",那么这当然意味着他们认为我们可能会切换数据库,这意味着他们反过来说他们认为我们不应该使用mysql。
这些天使用ORM很流行,但我个人认为ORM是一件坏事(问题:82882)
回答
这是一个主观的问题。
我个人将所有计算都包含在PHP中,并且仅将MySQL真正用作表。
但是,如果我们觉得使用存储过程比较容易,那么一定要继续进行。
回答
我不会说"存储过程是不行的",我会说"没有正当的理由就不要使用它们"。
MySQL存储过程的语法特别糟糕(Oracle和MSSQL也很糟糕),对其进行维护只会使应用程序复杂化。
如果确实有(可衡量的)理由,请使用存储过程,否则不要这样做。无论如何我都是这样。
回答
在MySQL中使用存储过程时,通常需要在PHP中使用mysqli接口,而不是常规的mysql接口。
这样做的原因是由于存储过程通常会返回1个以上的结果集。如果是这样,则mysql API无法处理它,并且我们会收到错误消息。
mysqli接口具有处理这些多个结果集的功能,例如mysqli_more_results和mysqli_next_result。
请记住,如果我们从存储过程中完全返回任何结果集,则需要使用这些API,因为该存储过程会为实际执行生成1个结果集,然后为有意从中返回的每个结果集再产生1个结果集。存储过程。
回答
我开发并维护一个大型的PHP / MySQL应用程序。这是我对存储过程的经验。
随着时间的流逝,我们的应用程序变得非常复杂。并且由于php方面的所有逻辑,某些操作将使用100多个简短查询来查询数据库。
MySQL是如此之快,以至于性能仍然可以接受,但效果并不理想。
我们在软件的最新版本中做出了将某些逻辑移至存储过程以进行复杂操作的决定。
由于我们不必在PHP和MySQL之间来回发送数据,因此确实实现了显着的性能提升。
我确实同意其他张贴者的观点,即PL / SQL不是现代语言,很难调试。
底线:对于某些情况,存储过程是一个很好的工具。但是,除非我们有充分的理由,否则我不建议我们使用它们。对于简单的应用程序,存储过程不值得麻烦。
回答
我认为使用存储过程可以在某些应用程序中提供一些抽象,因为在任何使用相同SQL代码块更新或者添加相同数据的地方,都可以创建一个sproc save_user($ attr ..... ),而不是到处重复。
同意该语法是多毛的,如果我们习惯于MSSQL和oracle sproc,则可能会有所不同。
回答
我们还应该知道,在5.0版之前的Mysql中不支持存储过程。 http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html另外,存储过程在该实现中也有些怪异。既然Mysql 5.1开始疯狂发展,我将看到Mysql对存储过程的更多使用。
回答
我使用了有限的存储过程,并且效果很好。我是我公司的一位客户的首席开发人员,正在他们的e-comm网站上工作。客户有一个库存系统,我们在他们的系统上实现了一组存储过程,并构建了一个与之通信的API。这使我们能够抽象他们的数据库,并且他们可以在存储过程中实现逻辑。简单但很好地满足了业务需求。
回答
我通常不使用存储过程,因为它增加了数据库的负载,这是99%的时间,这是我们最大的瓶颈。与使MySQL数据库复制相比,添加新的php服务器无济于事。