gpt4 book ai didi

php - PHP PDO 内部是如何工作的?

转载 作者:可可西里 更新时间:2023-10-31 22:51:08 24 4
gpt4 key购买 nike

我想在我的应用程序中使用 pdo,但在此之前我想了解内部如何 PDOStatement->fetchPDOStatement->fetchAll .

对于我的应用程序,我想执行类似“SELECT * FROM myTable”的操作并插入到 csv 文件中,它有大约 90000 行数据。

我的问题是,如果我在这里使用 PDOStatement->fetch:

// First, prepare the statement, using placeholders
$query = "SELECT * FROM tableName";
$stmt = $this->connection->prepare($query);

// Execute the statement
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_ASSOC));

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "Hi";
// Export every row to a file
fputcsv($data, $row);
}

每次从数据库中获取数据后,获取的结果都会存储在内存中吗?

这意味着当我进行第二次提取时,内存将包含第一次提取的数据以及第二次提取的数据。

因此,如果我有 90000 行数据并且如果每次都进行提取,那么内存将被更新以获取新的提取结果而不删除先前提取的结果,因此对于最后一次提取内存已经有 89999 行数据。

  1. PDOStatement::fetch 是这样的吗有用吗?
  2. 在性能方面,这个堆栈如何对抗 PDOStatement::fetchAll ?

更新:从内存使用的角度来看关于 fetch 和 fetchAll 的一些事情

只是想在这个问题上添加一些东西,因为最近发现了一些关于 fetch 和 fetchAll 的东西,希望这会让这个问题变得有值(value),因为人们将来会访问这个问题以对 fetch 和 fetchAll 参数有一些了解。

fetch 不会将信息存储在内存中,而是逐行工作,因此它会遍历结果集并返回第 1 行,然后再次转到结果集并再次返回第 2 行,请注意,它不会返回第 1 行和第 2 行,而只会返回第 2 行,因此 fetch 不会将任何内容存储到内存中,但 fetchAll 会将详细信息存储到内存中。因此,如果我们处理的结果集大小约为 100K,则与 fetchAll 相比,fetch 是更好的选择。

最佳答案

PHP 通常将其结果保存在服务器上。这一切都取决于司机。 MySQL 可以在“无缓冲”模式下使用,但使用起来有点棘手。 fetchAll() 对大型结果集可能会导致网络泛洪、内存耗尽等。

在我需要处理超过 1,000 行的每种情况下,我都没有使用 PHP。还要考虑您的数据库引擎是否已经具有 CSV 导出操作。许多人都这样做。

关于php - PHP PDO 内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527007/

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