php - Laravel 4.2 查询错误 - 当其他无缓冲查询处于事件状态时无法执行查询

标签 php mysql laravel laravel-4 pdo

因此,我尝试使用 Laravel 4.2 对包含 600,000 条记录的超大数据库运行查询。这样做时,出现以下错误:

SQLSTATE[HY000]:一般错误:2014 其他无缓冲查询处于事件状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。 (SQL:从 'UserLog' 中选择 'username'、'timestamp'、'ip'、'appID',其中 '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;
}

为了解释魔数(Magic Number) 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;
}

关于如何解决这个问题有什么想法吗?

最佳答案

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

另外,不要执行 count($getUsers) 然后检查它是否 > 0,而是使用

`if (!empty($getUsers))` 

它会更有效地处理大型数据集,并按照你的意思去做。 count() 会遍历数组,empty() 只会检查它是否不为 null 或 0 长度。

关于php - Laravel 4.2 查询错误 - 当其他无缓冲查询处于事件状态时无法执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020084/

相关文章:

php - Laravel 验证唯一

php - mySQL UNION 和 LIMIT 优先于一个 SELECT

php - __get() 函数在 php 中的行为

php - 每次插入MySQL数据库的IP都会改变

php - Azure AD B2C 使用 PHP 验证 JWT

python - 为什么我无法连接到远程 mysql 数据库?

php - 在 codeigniter 3 中切换数据库

javascript - 如何将数据显示为不同数据库表的选项

javascript - find().val() 返回未定义

mysql - 一般错误 : 1366 Incorrect integer value: