要在PHP中使用的内联查询与存储过程

时间:2010-02-02 10:09:53

标签: php mysql codeigniter stored-procedures

我一直在我的应用程序模型中使用内联查询语句...截至目前,很多人都说存储过程是一个很好的做法...我有以下问题

  • 如何在PHP Codeigniter中使用MySql存储过程?

  • 使用Mysql存储过程有什么好处?

2 个答案:

答案 0 :(得分:2)

存储过程就像其他任何工具一样(触发器,视图等),只应在工具适合的地方使用。获取您拥有的每个内联SQL语句并将其转换为存储过程都不是正确的方向。

使用非常粗略的逻辑编写存储过程,并使用游标循环遍历数据集,当您习惯于PHP处理逻辑时,这将成为一个障碍。

我使用SP的唯一项目是一个大型会计系统,其中数十万条记录必须经常更新,只需很少的代码直接输入。我们基本上只是告诉它什么时候开始,并且不需要将值传递给SP(尽管可以这样做)。然而,这只是我们在系统中使用的数千个内联查询中的一两个。我并不是说这是唯一可以使用它们的地方,但我已经构建了一些非常大的系统,并且还没有“需要”在其他地方使用它们。

在我看来,最好花时间学习内联编写高速,低拖动的查询,并使用EXPLAIN来验证是否正确设置了索引。我认为,除非您对存储过程非常特殊,否则您会发现它们对于每天使用都非常不友好。

答案 1 :(得分:1)

我并不是说存储过程必然是一切的答案。但是,不需要使用游标。我同意游标是一个障碍(缓慢),因此只应在绝对必要时使用。根据我的经验,游标仅用于设计不当(非规范化)的数据库,通常是因为普通查询无法根据需要提取数据。

我的背景是.NET,我会说存储过程是查询数据库的绝对最佳方式。我认为这部分是因为ASP.NET旨在促进它们。它提供了数据和代码之间的完美分离 - 您编写存储过程以返回所需的数据,然后对其进行测试。现在我刚刚进入php,所以我不能推荐最佳实践。它可能取决于您项目的具体情况(规模,复杂性等)。

但是不要因错误信息而对存储过程进行折扣。存储过程并不一定意味着将自己与使用缓慢,昂贵的游标联系起来。除了设置输出参数之外,它们基本上使用任何SQL查询使用的所有相同的语句和逻辑。你需要学习没有特殊的“粗略”逻辑。