在PHP循环上使用游标

时间:2011-09-16 07:48:17

标签: php mysql innodb

当我计划对The Application(TM)进行新一批添加时(例如,跨越公司的庞然大物),一个奇怪的问题出现了。为需要调用过程的每一行创建一个结果集,通过创建一个循环CURSOR并调用过程的过程,或者只是在PHP中获取集合,可以更有效地在MySQL中完成整个过程。 “手动”吗?该程序将持续几次短时间(每次呼叫约1次,每次约2-3次呼叫,每天几次)。

我问这个的原因是我想知道是否有人有任何经验证明CURSORS的效率低于在MySQL和PHP之间多次发送数据的开销。另一个问题是它使用了一个核心表,因此我希望尽量减少对它的命中。

1 个答案:

答案 0 :(得分:1)

您可以创建一个实现PHP Iterator接口的存根类(http://php.net/manual/en/class.iterator.php)。当您实例化使用Iteretor接口实现的类时,它可以保持连接并跟踪CURSOR的位置。创建此对象的新实例时,可以运行初始查询并获取initail游标。然后,当您在对象上使用foreach时,它将调用next()方法的对象自定义实现,您将编写该方法以向前移动CURSOR并根据循环的需要返回当前值。