antevenio / pdo-mysql-select-iterator
使用LIMIT子句实现的PHP PDO Mysql选择语句迭代器
0.1.14
2023-04-18 14:49 UTC
Requires
- php: >=5.6
- predis/predis: ^1.1
Requires (Dev)
- phpunit/phpunit: ^5.7
README
使用LIMIT子句实现的PHP PDO Mysql选择语句迭代器。
这是什么
因此,您希望迭代通过某些MySQL选择查询得到的数百万行表数据,因为您想对他们做些事情,但是,遗憾的是,您可爱的数据库管理员不喜欢在服务器上运行时间太长的查询,更糟糕的是,服务器本身无法处理它们!我们该怎么办?我们发出多个查询,每次获取较小的行块。
这是一个基于此概念的PHP迭代器。在接收到SELECT查询和PDO数据库连接后,构建一个迭代器,这样您可以无缝地遍历结果,而无需担心其他任何事情。
安装
使用composer添加依赖项
composer require antevenio/pdo-mysql-select-iterator
使用示例
<?php $pdo = new PDO('mysql:host=localhost;dbname=kidsshouting', 'myuser', 'mypass'); $iterator = (new \PdoMysqlSelectIterator\Factory()) ->create($pdo, "select a,b from tbl order by a", 1000); // Get a total row count from the query if needed $total = count($iterator); foreach ($iterator as $item) { // Do your stuff with $item }
注意
工厂会在非"select"查询时抛出InvalidQueryException异常。
工厂只有在以下条件下才会返回LimitIterator:
- blockSize > 0
- 查询包含"order by"子句
- 查询没有使用任何"rand()"函数
如果上述任一条件不满足,工厂将返回一个非limit的迭代器,称为"NativePDOIterator"。
为了确保结果的一致性,您可能需要在数据库事务中获取整个迭代和计数。最适合的隔离级别是REPEATABLE-READ。