加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP产量与PDO获取?

发布时间:2020-12-13 18:05:38 所属栏目:PHP教程 来源:网络整理
导读:昨天,我了解到 PHP有一个yield()方法.我不确定它在PHP中的用处. 一位同事表示,它可以帮助SQL语句返回许多行,从而导致潜在的内存问题.我相信他正在引用fetchAll(). 但是,不是使用fetchAll(),也可以使用fetch()并逐个处理行.因此,yield()不是解决他所指的问题
昨天,我了解到 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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读