Laravel 4.2查询错误 - 在其他未缓冲的查询处于活动状态时无法执行查询

时间:2015-03-12 20:59:24

标签: php mysql laravel laravel-4 pdo

因此,使用Laravel 4.2,我尝试在600,000条记录的超大型数据库上运行查询。这样做时,我收到以下错误:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. (SQL: select 'username', 'timestamp', 'ip', 'appID' from 'UserLog' where 'id' > 1179525)

这是我的代码:

public static function getUserLogData()
{
    $getUsers = DB::connection('PORTAL2')->table('UserLog')
                                         ->select('username', 'timestamp', 'ip', 'appID')
                                         ->where('id', '>', '1179525')
                                         ->get();

    $numOfRowsReturned = count($getUsers);

    if($numOfRowsReturned>0)
    {
        return $getUsers;
    }
    return 0;
}

要解释幻数 1179525 ,我使用该ID尝试仅选择10行,因为在1179525之后只有10个ID。

当代码看起来像这样时,查询工作正常(虽然我想选择~500行,而不是1行):

public static function getUserLogData()
{
    $getUsers = DB::connection('PORTAL2')->table('UserLog')
                                         ->select('username', 'timestamp', 'ip', 'appID')
                                         ->where('id', '>', '1179525')
                                         ->first();

    $numOfRowsReturned = count($getUsers);

    if($numOfRowsReturned>0)
    {
        return $getUsers;
    }
    return 0;
}

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

而不是->get()使用->take(10)或任何数字来指定返回的行数限制。 ->first()确实是->take(1)

而不是做计数($ getUsers),然后检查它是否是> 0,使用

`if (!empty($getUsers))` 

使用大型数据集会更有效,并且您的意思是做什么。 count()将遍历数组,empty()将仅检查它是否为null或0长度。