gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:45:56 24 4
gpt4 key购买 nike

因此,我尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com