PHP产量与PDO获取?

前端之家收集整理的这篇文章主要介绍了PHP产量与PDO获取?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
昨天,我了解到 PHP有一个yield()方法.我不确定它在PHP中的用处.

一位同事表示,它可以帮助sql语句返回许多行,从而导致潜在的内存问题.我相信他正在引用fetchAll().
但是,不是使用fetchAll(),也可以使用fetch()并逐个处理行.因此,yield()不是解决他所指的问题的关键.

我错过了关于yield()vs fetch()的内容吗?使用yield()和generator有更多好处吗?

P.S.:与使用fetch()相比,使用yield()在大型应用程序中编写干净,可读和可维护的代码更容易.

So,yield() is not key to solving the issue he is referring to.

究竟.

但它可以让你伪装while()/ fetch()序列作为foreach()调用,如果你愿意,也没有内存开销.

但是,PDO并不是一个很好的例子,因为PDOStatement已经实现了一个可遍历的接口,因此can be iterated over using foreach()

$stmt = $pdo->query('SELECT name FROM users');
foreach ($stmt as $row)
{
    var_export($row);
}

因此,让我们将MysqLi用于只能逐个传输结果的示例API.
编辑.实际上,since 5.4.0 mysqli supports Traversable也是如此,所以使用MysqLi_result也没有意义.但是,我们保留它用于演示目的.

让我们创建一个像这样的生成

function MysqLi_gen (MysqLi_result $res)
{
    while($row = MysqLi_fetch_assoc($res))
    {
        yield $row;
    }
}

现在你可以使用foreach获取行而不需要开销:

$res = $MysqLi->query("SELECT * FROM users");
foreach (MysqLi_gen($res) as $row)
{
    var_export($row);
}

猜你在找的PHP相关文章