WithCoderWithCoderWithCoder

PHP生成器yield应用之读取Mysql大数据表

    在“PHP生成器yield介绍”这篇文章中,我们介绍了yield生成器的概念和基本用法。本文介绍如何使用生成器读取mysql数据库。

    测试使用的环境是Think PHP5,使用mysqli连接数据库。

    我们常用的mysql查询函数是mysqli的query(sql,resultmode),通常都是直接填写第一个参数就直接查询,但该函数默认的是对全部结果集进行缓存。这会导致数据过多的时候,造成内存溢出。因此,我们需要设置第二个参数为MYSQLI_USE_RESULT来逐行读取结果集。

    下面简单介绍使用生成器读取mysql数据库的原理:

    1. 初始化数据库连接,读取数据,并使用生成器返回结果 

function getData()
{
    $sql = "select * from tn_home;";
    // 读取配置文件,初始化mysqli
    $mysqli = new \mysqli(config::get("database.hostname"), config::get("database.username"),
        config::get("database.password"), config::get("database.database"));
    $mysqli->set_charset('utf8');
    if (mysqli_connect_errno())
        throw_exception(mysqli_connect_error());
    // 该处用MYSQLI_USE_RESULT 不缓存结果集中,也是为了避免内存溢出,相当于mysql_unbuffered_query
    $rest = $mysqli->query($sql, MYSQLI_USE_RESULT);
    foreach ($rest as $row) {
        yield $row; // 使用生成器返回结果
    }
    $mysqli->close();
}

    2. 使用 foreach 迭代对象

function showdata()
{
    $data = $this->getData();
    foreach ($data as $item) {
        var_dump($item); // 此处打印结果,实际生产环境可根据需要进行修改
    }
}

    当然,本文只是对使用yield生成器读取数据库做简单的原理介绍,更复杂的实现可根据实际情况进行处理。

欢迎分享交流,转载请注明出处:WithCoder » PHP生成器yield应用之读取Mysql大数据表